1、Java8 新特性 – Lambda 表达式
1.1、单方法接口使用 Lambda 表达式
1 | csharp复制代码public interface ITest { |
使用场景:单接口快速创建实现类。
1.2、Lambda 中的方法引用运算符 ‘::’ 用法
1 | csharp复制代码public void test(){} |
该运算符可用于以下场景:
(1)类::实例方法名
Person::test
(2)类::静态方法名
1 | java复制代码public class TestComponent { |
(3)对象::实例方法名
1 | java复制代码public class TestComponent { |
后两种可以这样理解:“::” 是方法引用操作符,传递的是方法的引用,在接口调用唯一方法的时候就是在调用传递进来的方法引用,所以在以上语法的基础上,只要保持返回值和参数完全一致就能将方法传递进去。
1.3、Lambda 中的 stream() 做了哪些优化?
优化 1:操作并行。
Lambda 在执行操作方法的时候会尽可能的多执行用户操作。比如我们需要将一个集合排序、筛选等操作,常规处理可能会将集合进行多次迭代处理数据,而 stream api 在执行的时候会将这些操作放到一个迭代中操作。
优化 2:节省存储空间。
在我们的常规方法中,一个排序后的操作可能会放置到新的集合中存储,而在 stream 中是在触发结束装后才会进行计算操作,省去了中间的存储操作。
具体可参考 :www.cnblogs.com/CarpenterLe…
1.4、stream api
对象准备:
1 | less复制代码@Data |
filter:过滤流,取匹配条件表达式的数据。
1 | scss复制代码public static void main(String[] args) { |
map:转换流,将一种数据类型转换成另外一种数据类型,转换的类型取决于 Function 的 apply 返回的数据类型。
1 | scss复制代码 public static void main(String[] args) { |
mapToInt:转换流,将数据类型转换成 int 类型
1 | scss复制代码public static void main(String[] args) { |
mapToLong:转换流,将数据转换成 long 类型
mapToDouble:转换流,将数据类型转化成 double 类型
distinct:去重,去重规则是根据 equals 和 hashCode 方法来过滤的。
1 | less复制代码public static void main(String[] args) { |
sorted:排序
1 | less复制代码 public static void main(String[] args) { |
peek:中间流操作,和 map 功能有点像,只不过没有替换操作,作用是用来调试中间状态的值。
1 | csharp复制代码 List<String> arr = new ArrayList<>(); |
limit:保留前 n 条数据。
skip:跳过 n 条数据
forEach:遍历,可能不是按照集合的顺序遍历
forEachOrdered:按照顺序遍历
reduce:数据计算
1 | less复制代码public static void main(String[] args) { |
collect:将流转换成对象类型
1 | scss复制代码public static void main(String[] args) { |
min:最小值
max:最大值
count:统计数量
anyMatch:是否有匹配条件语句的数据
allMatch:数据是否全部匹配条件语句
noneMatch:数据是否全部不匹配
1.5、Predicate 与 Function
除了这些,JDK 中还预定义了很多 FunctionalInterface 类,这样我们就无需自己去重复定义一些类似的接口了。
Function
1 | typescript复制代码@FunctionalInterface |
Function 可以接受任意的 Lambda 表达式,当然参数只能是一个的。
1 | ini复制代码Function<Person, String> getName = Person::getName; |
Function<T, R>
中 T 决定 参数类型,R 决定返回值类型。
Predicate
Predicate 相当于在 Function 的基础上限定了返回值的类型,常用于接收条件表达式。
1 | scss复制代码@FunctionalInterface |
1 | ini复制代码Predicate<Integer> s = t -> t > 1; |
本文转载自: 掘金