• lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。
  • Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。

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

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

 package JDK8Test;
interface RunTask
{
void run();
}
public class Main
{ public static void main(String[] args)
{
RunTask r=new RunTask()
{
public void run()
{
System.out.println("我是线程要执行的任务");
}
};
r.run();
}
}

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

  Lambda表达式形式:

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

  使用前提:

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

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

 package JDK8Test;
interface RunTask
{
String run();
}
public class Main
{
public static void main(String[] args)
{
RunTask r=()->System.currentTimeMillis()%2==0?"当前的毫秒值能被2整除":"不能被2整除";
String value=r.run();
System.out.println(value);
}
}

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

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

 package JDK8Test;
interface RunTask
{
String run(String name);
}
public class Main
{
public static void main(String[] args)
{
RunTask r=(who)->who+"在调用我";
String value=r.run("Peter");
System.out.println(value);
}
} //输出 Peter在调用我

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

  4、实现比较器接口:

 package JDK8Test;
import java.util.*; public class Main
{
public static void main(String[] args)
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(5);
list.add(8);
list.add(6);
System.out.println(list);
Collections.sort(list, (Integer a,Integer b)->a-b);
System.out.println(list);
}
}
//[5, 8, 6]
//[5, 6, 8]

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

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

 package JDK8Test;
import java.util.ArrayList;
import java.util.function.Consumer; public class Main
{
public static void main(String[] args)
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(5);
list.add(8);
list.add(6);
Two two=new Two();
list.forEach(two);
}
}
class Two implements Consumer<Integer>
{
public void accept(Integer t)
{
System.out.println("遍历中"+t);
}
}
/*输出:
遍历中5
遍历中8
遍历中6
*/

  Lambda表达式方法:

  

 package JDK8Test;
import java.util.ArrayList;
import java.util.function.Consumer; public class Main
{
public static void main(String[] args)
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(5);
list.add(8);
list.add(6);
Consumer<Integer> r=(Integer t)->System.out.println("遍历中"+t);
list.forEach(r);
}
}
/*输出:
遍历中5
遍历中8
遍历中6
*/

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

  

 package JDK8Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Consumer; public class Main
{
public static void main(String[] args)
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(5);
list.add(8);
list.add(6);
System.out.println(list);
Collections.sort(list, (Integer a,Integer b)->{return a-b;});
System.out.println(list);
}
}
/*输出:
[5, 8, 6]
[5, 6, 8]
*/

  没有{}和有{}的区别是:
  ①没有{}包裹的不用写return 关键字,有{}包裹的,如果有返回值,必须使用return 关键字返回数据
  ②没有{}包裹的只能写一个语句,而有{}包裹的可以写任意多条语句。

最新文章

  1. Mysql空用户导致数据库登陆故障处理 (原创帖,转载请注明出处)
  2. maven3.04管理jetty9.2.10启动web项目
  3. hdu 4414 暴力枚举
  4. 快速排序(Quick Sort)的C语言实现
  5. linux/hpux 添加用户
  6. PreparedStatement设置时间
  7. Indy10.2.5的危险做法
  8. mysql 隔离级别与锁
  9. 应用负载均衡之LVS(二):VS_TUN和VS_DR的arp问题
  10. JavaScript(第十七天)【浏览器检测】
  11. Spring事务管理----事物回滚
  12. 从MVC和三层架构说到SSH整合开发
  13. pycharm 出现 &quot;PEP:8 expected 2 blank lines ,found 0&quot;
  14. C#正则表达式语法教程
  15. 字节数组与String类型的转换
  16. Docker初次使用与安装过程
  17. CTPN - 训练
  18. github搭建个人博客----------绑定域名访问
  19. java SSH框架
  20. Summary #ToBeContinue......

热门文章

  1. Apache的安装与下载
  2. Linux程序编辑器习题汇总
  3. oracle 基本函数
  4. loj6387 「THUPC2018」绿绿与串串 / String
  5. C#开发微信公众平台教程
  6. MongoDB快速入门学习笔记6 MongoDB的文档删除操作
  7. C++ map 的用法归纳2
  8. pycharm的常用操作:设置字体主题,注释整段代码,调整格式,批量替换等
  9. Docker与CTF
  10. Python/PHP 远程文件/图片 下载