博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java8新特性之lamda表达式
阅读量:6436 次
发布时间:2019-06-23

本文共 3041 字,大约阅读时间需要 10 分钟。

lamda表达式

java8中lamda表达式的引入,标志着java开始拥抱主流函数式编程语言,其实lamda表达式并不是什么新鲜事物,在JavaScript中早已存在。作为经典语言引入lamda表达式以及java8中的其他新特性,如流式处理,会一定程度上让代码更简洁,当然还是无法和JavaScript这类语言相比,但这也正是各自所处的角色的不同决定的。

lamda表达式的格式

  1. 参数类型声明:可以不需要声明参数类型,编译器会识别参数值。
  2. 参数圆括号(可选):在单个参数时可以不使用括号,多个参数时必须使用。
  3. 大括号和return关键字(可选):如果只有一个表达式,则可以省略大括号和return关键字,编译器会自动的返回值;相对的,在使用大括号的情况下,则必须指明返回值。

lamda表达式例子

以Collections.sort为例

/** * @author xiantao.wu * @create 2018/8/1514:09 **/public class TestLamda {    public static void main(String[] args) {        //原生方法        List
students1=getStudentList(); Collections.sort(students1, new Comparator
() { @Override public int compare(Student o1, Student o2) { return o1.getAge().compareTo(o2.getAge()); } }); students1.forEach(in-> System.out.print(in.getName()+in.getAge()+"|")); System.out.println("原生方法"); //第一种情况:传入静态方法 List
students2=getStudentList(); Collections.sort(students2, (s1, s2) -> Student.sortByAgeStatic(s1, s2)); students2.forEach(in-> System.out.print(in.getName()+in.getAge()+"|")); System.out.println("第一种情况:传入静态方法"); //第二种情况:传入实例方法 List
students3=getStudentList(); Collections.sort(students3, (s1, s2) -> new Student().sortByAgeNonStatic(s1, s2)); students3.forEach(in-> System.out.print(in.getName()+in.getAge()+"|")); System.out.println("第二种情况:传入实例方法"); //第三种请款,不适用大括号 List
students4=getStudentList(); Collections.sort(students4, (s1, s2) -> s1.getAge().compareTo(s2.getAge())); students4.forEach(in-> System.out.print(in.getName()+in.getAge()+"|")); System.out.println("第三种请款,不适用大括号"); //第四种情况,使用大括号 List
students5=getStudentList(); Collections.sort(students5, (s1, s2) -> { return s1.getAge().compareTo(s2.getAge()); }); students5.forEach(in-> System.out.print(in.getName()+in.getAge()+"|")); System.out.println("第四种情况,使用大括号"); } private static List
getStudentList() { List
studentList = new ArrayList(); for (int i = 0; i < 5; i++) { Student stu = new Student(); stu.setAge(new Random().nextInt(10)); stu.setName("tom"); studentList.add(stu); } return studentList; }}/** * @author xiantao.wu * @create 2018/8/1515:44 **/public class Student { private Integer age; private String name; public static int sortByAgeStatic(Student o1, Student o2) { return o1.getAge().compareTo(o2.getAge()); } public int sortByAgeNonStatic(Student o1, Student o2) { return o1.getAge().compareTo(o2.getAge()); } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; }}复制代码

测试结果:

tom1|tom2|tom3|tom3|tom9|原生方法tom0|tom0|tom1|tom2|tom4|第一种情况:传入静态方法tom2|tom2|tom3|tom4|tom8|第二种情况:传入实例方法tom1|tom1|tom1|tom4|tom8|第三种请款,不适用大括号tom0|tom1|tom1|tom3|tom7|第四种情况,使用大括号复制代码

转载于:https://juejin.im/post/5be43f04e51d450b291bdf43

你可能感兴趣的文章
全备份失败后,如何手工清除exchange日志文件,附微软KB
查看>>
java如何连接mysq之源码l讲解
查看>>
企业运维笔试考题(1)
查看>>
Mysql修改存储过程相关权限问题
查看>>
4.2权限管理
查看>>
彻底理解ThreadLocal
查看>>
AI看脸、测肤,左可美妆新零售,右能智慧医美
查看>>
MFC对话框弹出上下文菜单并响应命令
查看>>
用matplotlib获取雅虎股票数据并作图
查看>>
USB设备被识别流程【转】
查看>>
test
查看>>
跨入安全的殿堂--读《Web入侵安全测试与对策》感悟
查看>>
Python类及面向对象编程【转】
查看>>
spring boot(二):web综合开发
查看>>
DataGrid 功能实现收集(一)
查看>>
ANT 运行jar包的中文乱码问题
查看>>
【Xamarin.Android】应用消费品
查看>>
Programming with gtkmm 3
查看>>
LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】
查看>>
brk(), sbrk() 用法详解【转】
查看>>