java lambda使用_Java 8 Lambda表达式的使用

lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。

Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。

实现一个接口(功能接口)中的唯一方法(老办法):

1、接口中的方法无返回值:

1 packageJDK8Test;2 interfaceRunTask3 {4 voidrun();5 }6 public classMain7 {8

9 public static voidmain(String[] args)10 {11 RunTask r=newRunTask()12 {13 public voidrun()14 {15 System.out.println("我是线程要执行的任务");16 }17 };18 r.run();19 }

20 }

首先要创建一个类,这个类实现了这个功能接口,然后在类中对方法进行实现。然后实例化一个这个类的对象r,由对象调用run()方法。(此处使用匿名内部类)

Lambda表达式形式:

Java提供了一个新的操作符"->" 这个操作符之前有一个括号,括号里面就是接口中的那个唯一的方法的参数列表,操作符后面就是我们以前实现接口中的方法中的语句,具体就以上面的代码为参照。

使用前提:

①接口中就只有一个抽象方法,也就是我们刚刚定义的接口,里面就只能有一个抽象方法。

2、接口中的方法有返回值:

1 packageJDK8Test;2 interfaceRunTask3 {4 String run();5 }6 public classMain7 {8 public static voidmain(String[] args)9 {10 RunTask r=()->System.currentTimeMillis()%2==0?"当前的毫秒值能被2整除":"不能被2整除";11 String value=r.run();12 System.out.println(value);13 }14 }

也就是说,如果返回值是一个String类型的,则”->”后面跟的就必须是一个字符串。调用run()方法时,返回的就是这个字符串。

3、接口中的方法有参数:

1 packageJDK8Test;2 interfaceRunTask3 {4 String run(String name);5 }6 public classMain7 {8 public static voidmain(String[] args)9 {10 RunTask r=(who)->who+"在调用我";11 String value=r.run("Peter");12 System.out.println(value);13 }14 } //输出 Peter在调用我

操作符"->“前面的括号中写了一个参数的变量名,然后你可以看到这个变量在后面的语句中我们就可以使用了!方法中的参数接收一个String类型的,所以who这个变量就必须是字符串类型的,所以who前面可以加一个String。

4、实现比较器接口:

1 packageJDK8Test;2 import java.util.*;3

4 public classMain5 {6 public static voidmain(String[] args)7 {8 ArrayList list=new ArrayList();9 list.add(5);10 list.add(8);11 list.add(6);12 System.out.println(list);13 Collections.sort(list, (Integer a,Integer b)->a-b);14 System.out.println(list);15 }16 }17 //[5, 8, 6]18 //[5, 6, 8]

可以看得到”->" 操作符前面是接口中的方法的参数列表,后面是实现接口的方法中的表达式。

5、实现Consumer接口,遍历集合(老方法):

1 packageJDK8Test;2 importjava.util.ArrayList;3 importjava.util.function.Consumer;4

5 public classMain6 {7 public static voidmain(String[] args)8 {9 ArrayList list=new ArrayList();10 list.add(5);11 list.add(8);12 list.add(6);13 Two two=newTwo();14 list.forEach(two);15 }16 }17 class Two implements Consumer

18 {19 public voidaccept(Integer t)20 {21 System.out.println("遍历中"+t);22 }23 }24 /*输出:25 遍历中526 遍历中827 遍历中628 */

Lambda表达式方法:

1 packageJDK8Test;2 importjava.util.ArrayList;3 importjava.util.function.Consumer;4

5 public classMain6 {7 public static voidmain(String[] args)8 {9 ArrayList list=new ArrayList();10 list.add(5);11 list.add(8);12 list.add(6);13 Consumer r=(Integer t)->System.out.println("遍历中"+t);14 list.forEach(r);15 }16 }17 /*输出:18 遍历中519 遍历中820 遍历中621 */

5、”->”后面有{}包裹:

1 packageJDK8Test;2 importjava.util.ArrayList;3 importjava.util.Collections;4 importjava.util.function.Consumer;5

6 public classMain7 {8 public static voidmain(String[] args)9 {10 ArrayList list=new ArrayList();11 list.add(5);12 list.add(8);13 list.add(6);14 System.out.println(list);15 Collections.sort(list, (Integer a,Integer b)->{return a-b;});16 System.out.println(list);17 }18 }19 /*输出:20 [5, 8, 6]21 [5, 6, 8]22 */

没有{}和有{}的区别是:

①没有{}包裹的不用写return 关键字,有{}包裹的,如果有返回值,必须使用return 关键字返回数据

②没有{}包裹的只能写一个语句,而有{}包裹的可以写任意多条语句。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值