lambda表达式与常用方法_Allione_新浪博客

1、什么是lambda,是java8新的特性,是一个匿名函数,可以非常简洁的实现接口。                                    lambda对接口的要求:接口里面的抽象方法只能够存在一个,或者被@FunctionalInterface修饰接口,或者接口中有一个抽象方法,其他的都是dafault或者静态方法。

2、Lambda定义的三个语法:                                                                                                     (params) -> 单行语句;(params) ->表达式;(params) ->{多行语句};                                               lambda需要关注方法的参数列表和方法体,()描述参数列表;{}描述方法体;—>lambda运算符,gos to        无参无返回:Interface inter1 = ()—>{System.out.println(无参无返回")}

3、精简:lambda表达式中参数的类型可以省略,因为在接口中的方法已经定义了类型;                                       如果参数的数量只有一个,可以省略小括号                                                                                           方法体中只有一条语句,此时大括号可以省略,如果该语句是返回语句,省略大括号的同时省略return.

    例如  Interface inter1 = x—> System.out.println("无参无返回")                                                                Interface inter1 = x—> change(x) 

4、普通方法引用   Interface inter1 = x—> Sysclass::change                                                           构造方法引用  Interface inter1 = Sysclass::new(无参构造方法)返回Sysclass对象

5、常用的lambda表达式:

1)  new Thread( () -> System.out.println("In" ).start();   实现了Runnable接口中的run()方法,该方法没有参数,大括号内的表达式就是该run方法的实现,如上面3所说,这个前提就是接口里面的抽象方法只能够存在一个。

2)foreach用法: 

lambda表达式与常用方法 填写图片摘要(选填)

3)stream流Java 8 中的stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation),生成流的两种方式:stream()− 为集合创建串行流。parallelStream() − 为集合创建并行流。

4)map用法接受一个函数作为参数,并将函数应用到每一个元素上,返回新的元素list. 

lambda表达式与常用方法 填写图片摘要(选填)

5)sorted()用法:

sorted()产生一个新流,其中按自然顺序排序;                                                                   sorted(Comparator comp)产生一个新流,其中按比较器顺序排序                                                                     例如:                                                                                                             Comparator comparator = (String o1, String o2) -> o1.compareTo(o2);  

array.stream().map(testCode1 -> testCode1.getAge()).sorted(comparator).foreach(System.out::println);

6)match相关的方法:

allMatch(Predicate p)检查是否匹配所有元素

如:Boolean isMatch = array.stream().allMatch(t -> t.getAge() > 23),是否有年龄大于23的元素,返回的是布尔类型。

7)reduce相关方法:将元素中的值以某种方式连接起来

例如:Optional result = array.stream().map(e -> e.getAge()).reduce((x, y) -> x + "," + y);  输出:24,25

8)collect(Collector c):将流转换为其他形式。接收一个Collector接口的实现,用于给Stream中元素做汇总的方法 

lambda表达式与常用方法 填写图片摘要(选填)

例如:

1、集合排序:ArrayList list = new ArrayList<>();                                                                       list.sort((o1,o2)->o2.age - o1.age)   实现按年龄倒序排序                                                                 Collections.sort(list)  默认升序    Collections.sort(list,(o1,o2)->o2.age - o1.age)                               TreeSet  set = new TreeSet();                                                                                       若直接输出set,则会报错,因为TreeSet是默认实现了Comparator接口的,但是该set中的比较不知道按Person中的哪个字段进行排序,所以会报错。                                                                                           可以这样写:TreeSet  set = new TreeSet<>((o1,o2)->o2.age - o1.age),指定排序方法.

2、集合遍历:ArrayList list = new ArrayList<>();                                                                            list.forEach(each->{                                                                                                                       if(each%2=1)System.out.print(each);                                                                                         })

3、删除集合中满足条件的元素:ArrayList list = new ArrayList<>();                                              list.removeIf(each -> each.age > 15);  把大于15的person对象删除

4、线程实现:Thread thread = new Thread(()-> {

                for(int i=0; i< 10; i++){

                    System.out.println(i);

                }                  

            });

            thread.start();     实现了Runnable接口中的run()方法

注:摘自:https://www.cnblogs.com/maikucha/p/8435906.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值