JavaSE_Lambda
1.什么是Lambda表达式?
Lambda表达式是java 8 引进的语法特性。对于函数式接口(只申明一个函数的接口),它提供了一个简单的方式让程序员编写匿名函数,同时改善了Java集合框架库(Collection),使得更加容易迭代、过滤一个集合,更加容易从一个集合中提取数据。并且在多核计算机的情况下,新特性提高了运算性能。
2.函数式接口!
- 函数式接口就是只显式声明一个抽象方法的接口。
- 为保证方法数量不多不少,java8提供了一个专用注解 @FunctionalInterface。
- 函数式接口可以包含默认方法
3.Lambda表达式语法!
- -> 被称为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分。
- 左侧: 指定了 Lambda 表达式需要的方法参数列表。
- 右侧: 指定了 Lambda 体,即 Lambda 表达式要执行的功能。
3.1 参数类型和参数
- 案例1 :声明参数类型和参数
( Integer number ) -> { return number * 1024; };
- 案例2 :默认推导声明参数类型
( number ) -> { return number * 1024; };
number -> { return number * 1024; };
3.2 匿名方法实现体
- 案例1 :只有一条语句时,可省略return和{ }
( Integer number ) -> number * 1024;
- 案例2 :没有返回值,需要输出时
( number ) -> System.out.println(number * 1024);
4.Lambda案例(集合)
4.1 集合排序比较器:Comparator
//使用Lambda表达式
Collections.sort ( bookList , (o1 , o2) -> o1.getSales( ) - o2.getSales( ) );
//使用匿名内部类
Collections.sort ( bookList , new Comparator<Book>( ) {
@Override
public int compare(Book o1, Book o2) {
return o1.getSales() - o2.getSales();
}
});
4.2 List 遍历操作
//使用Lambda表达式遍历集合
bookList.forEach ( book -> System.out.println(book));
//使用普通for循环遍历集合。
for (Book book : bookList) {
System.out.println(book);
}
4.3 List 过滤遍历操作:filter
//首先获取List的Stream对象
bookList.stream( )
//传入条件
.filter( book -> book.getPrice() > 20 )
//输出
.forEach( book -> System.out.println(book) );
//直接判断
bookList.forEach( book -> {
if(book.getPrice( ) > 20) {
System.out.println(book);
}
});
4.4 计算集合元素的最大值、最小值、总和以及平均值
DoubleSummaryStatistics statsPrice = bookList.stream( ) .
mapToDouble( book -> book.getPrice( ))
.summaryStatistics( );
IntSummaryStatistics statsSales = bookList.stream( )
.mapToInt( book -> book.getSales( ) )
.summaryStatistics( );
- statsSales.getCount( ) //统计数量
- statsSales.getAverage( ) //统计平均值
- statsSales.getMax( ) //统计最大值
- statsSales.getMin( ) //统计最小值
- statsSales.getSum( ) //统计总和