Java8 lambda表达式
来源:互联网 发布:网络上dm是什么意思 编辑:程序博客网 时间:2024/06/07 09:48
一、为什么使用lambda表达式
Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
例:对list对象进行排序,之前需要创建Comparator的匿名类,进行重写方法设置比较条件,现在用lambda表达式则将执行的代码块传进去,代码如下:
/*** 实体bean*/public class Student { private int age; private String name; private double score; public Student(int age, String name, double score) { this.age = age; this.name = name; this.score = score; } public int getAge() { return age; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + ", score=" + score + '}'; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getScore() { return score; } public void setScore(double score) { this.score = score; }}public class LambdaTest { List<Student> list = Arrays.asList( new Student(17,"Lily",88.8) ,new Student(19,"Tom",55.8) ,new Student(30,"Sony",66.8) ,new Student(22,"Apple",77.8) ,new Student(22,"Jack",89.8)); @Test public void compareByAge(){ Collections.sort(list, new Comparator<Student>(){ @Override public int compare(Student o1, Student o2) { if(o1.getAge() == o2.getAge()){ return o1.getName().compareTo(o2.getName()); } return o1.getAge() - o2.getAge(); } }); } @Test public void compareByAgeLambda(){ Collections.sort(list, (e1,e2) -> { return e1.getAge() - e2.getAge(); }); }}
二、lambda表达式语法
Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或剪头操作符。它将 Lambda 分为
两个部分:
左侧: 指定了 Lambda 表达式需要的所有参数。
右侧: 指定了 Lambda 体,即 Lambda 表达式要执行的功能。
语法格式一:无参,无返回值,Lambda 体只需一条语句
Runnable r1 = ()->System.out.println("Hello World");
语法格式二:Lambda 需要一个参数
Consumer<String> fun = (args)->System.out.println(args);
语法格式三:Lambda 只需要一个参数时,参数的小括号可以省略
Consumer<String> fun = args->System.out.println(args);
语法格式四:Lambda 需要两个参数,并且有返回值
BinaryOperator<Long> bo = (x, y) -> {return x + y;}
语法格式五:当 Lambda 体只有一条语句时,return 与大括号可以省略
BinaryOperator<Long> bo = (x, y) -> x + y;
语法格式六:数据格式的省略
BinaryOperator<Long> bo = (Long x,Long y) -> {return x + y;}
类型推断
上述 Lambda 表达式中的参数类型都是由编译器推断得出的。 Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。 Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。
阅读全文
0 0
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8: Lambda表达式语法
- java8 Lambda表达式
- Java8 Lambda表达式教程
- Java8 Lambda表达式
- java8 Lambda表达式
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- java8 lambda表达式-语法
- java8 lambda表达式-其他
- java8 lambda表达式
- Java8 Lambda表达式入门
- Spark/Java8 lambda表达式
- Java8 Lambda表达式教程
- Java8 lambda表达式
- Java8 Lambda表达式教程
- Oracle 常用命令
- Java 8 新特性——学习总结
- Spring Batch 精萃
- 自定义UI
- 水题 第一站 国王 的魔镜
- Java8 lambda表达式
- 卸载Percona
- 矩阵快速幂 HDU 2157 HDU 5015 POJ 3233
- Linux--crond与crontab详解
- Linux下Docker安装和使用教程
- JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
- javaWeb下载文件技术(Servlet)
- 第一场个人训练赛——B-计算两点间的距离(HDU 2001)
- Maven的主要作用与工程类型