JDK8新特性之Lambda表达式和四大函数接口

在Java8中,加入了Lambda(Lambda expression),在使用它以前我们先聊聊为什么要加入Lamdba,使用它对于编程上有什么好处 

一、Lamdba的作用

1.在我们需要把一些功能传递给某些方法时,在 Java 8 以前,我们就需要去写匿名内部类。引入lambda表达式后,你可以在一个类中简便的定义参数和方法,替代大部分匿名内部类和功能接口,使得代码更加优雅,Lambda提供了一个参数列表和只用这些参数的功能体,也被称为闭包。

二、使用Lambda表达式要知道的规范

1.一个Lambda必须对应一个接口,并且这个接口是有要求的,这个接口只能被实现一个方法,如果写了多个方法,在写Lambda表达式的时候就会报不是只有一个抽象方法在接口内。无法使用lambda进行编码。

2.如何让程序知道接口是函数型的呢,需要在接口上添加@Functionallnterface注解。

三、Lambda表达式格式

1.语法形式为 () -> {},其中()为参数列表,{}为方法体,->是一个Lambda表达式,可以理解为一个箭头,为{}方法体中的方法提供参数。

首先创建两个接口

@FunctionalInterface

public interface LambdaNoreture2 {

        void method(string a,string b);

}

@FunctionalInterface

public interface LambdaNoreture1 {

        void method(string a);

}

Lambda表达式基本格式(参数a,参数b)->{方法体}

public class Lambda {

    public static void main(String[] args) {

        LambdaNoreture2 lambdaNoreture2=(String a,String b)->{

            System.out.println("Hello" + a + b +"!"); 

       }; 

       lambdaNoreture2.method("Lam","bda");

}

//输出HelloLambda!

Lambda简写方式:如果参数和方法都只有一个那么可以省略掉圆括号()和大括号{};如果多个或一个参数类型一样,可以不写参数类型,如下。

public class Lambda {

    public static void main(String[] args) {

        LambdaNoreture1 lambdaNoreture1=a->

            System.out.println("Hello" + a + b +"!");

                lambdaNoreture1.method("Lam","bda");

}

//输出HelloLambda!

四、四大接口

因为每次要用到Lambda表达式都要创建一个相应的函数式接口,很麻烦,所以JDK8贴心的给我们做好了一些函数式接口,大部分情况下我们就不用新建接口了,直接用就可以,其中我们主要学习下四个最常用的接口;

1.第一个函数式接口Function<T,R>, Fcuntion接口会接收一个T(泛型)类型参数,返回R类型的结果的方法,通过调用apply方法执行内容。下面的例子是用Fcuntion来表白的例子

import java.util.function.Function;

public class LambdaFcuntion {

    public static void main(String[] args) {

        Function S=r->r*r*3.14+67.84;

        System.out.println(S.apply(12.0));

        }

}

//输出:520.0

2.Predicate接口predicate<T,Boolean>,Predicate接口是一个用于判断的接口,平常可以用来当过滤器使用,有一个参数和一个布尔类型的返回值,下面是一个判断是否成人的例子。

import java.util.function.Predicate;

public class LambdaPredicate {

    public static void main(String[] args) {

        Predicate  predicate=age->age>=18;

        System.out.println(predicate.test(5));

        System.out.println(predicate.test(20));

        }

}

//test(5)输出结果:false

//test(20)输出结果:true

3.Consume接口,Consum也叫消费接口,该接口对应的方法类型为接收一个参数,没有返回值,下面是一个例子。

import java.util.function.Consumer;

public class Consum {

    public static void main(String[] args) {

        Consumer printString = s -> System.out.println(s);

        printString.accept("消费成功,这是你的Consumer");

    }

}

//输出结果:消费成功,这是你的Consumer

4.Supplier接口, 和Consume相反,他没有参数、只有返回值,所以也叫给予接口,可以使用get()方法获得这个返回值,下面是一个例子。

import java.util.function.Supplier;

public class Supplier{

    public static void main(String[] args) {

        Supplier<String> Supplier = () ->"I get Supplier";

        System.out.println(Supplier.get());

    }

}

//输出结果:I get Supplier

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容