前言
Lambda 表达式本质是一个匿名函数,用于把函数作为参数,传入方法中,实现函数式编程风格。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
目录
一、排序
二、遍历
三、Predicate接口
四、Function
五、Comparator
六、Stream流
七、Collect收集
八、Statistics统计
九、ParallelStream并行流
没有学习Lambda表达式之前我们要实现排序功能,我们需要new一个Comparator接口的匿名实现类。
上面代码用Lambda表达式可以写作:
forEach的两种遍历方式。
遍历结果:
Predicate 接口是只有一个参数的返回布尔类型值的 断言型接口。该接口包含多种 默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与 and ,或 or ,非 negat e ):
predicate1:返回长度为6的元素;
predicate2:返回所有字符都是字母的元素;
predicate3:predicate1和predicate2的并集;
predicate4:predicate3的取反;
public class Demo03 {
public static void main(String[] args) {
List list = Arrays.asList("Spring", "SpringBoot", "SpringMVC", "MQ", "C+++++");
Predicate predicate1 = (l) -> {
return l.length() == 6;
};
Predicate predicate2 = (l) -> {
for (int i = 0; i < l.length(); i++) {
if (!Character.isLetter(l.charAt(i))) {
return false;
}
}
return true;
};
Predicate predicate3 = predicate1.and(predicate2);
Predicate predicate4 = predicate3.negate();
list.forEach((x) -> {
if (predicate2.test(x)) {
System.out.println(x);
}
});
}
}
结果:
Function 接口接受一个参数并生成结果。默认方法可用于将多个函数链接在一起( compose , andThen )
funcation1:变小写;
funcation2:字符串两端加<>
funcation3:变小写加<>(作用等同于:apply(before.apply(v)))
funcation4:变小写加<>(作用等同于:before.apply(apply()))
function3运行结果:
function4运行结果:
比较器接口,用于比较指定元素值的大小。 Java 8版本中,添加了多个新的 default 方法,用于比较器合 并、反转等操作。
comparator1:比较ASCII码
comparator2:比较长度
comparator3:先比内容再比长度
comparator4:comparator3的反转
comparator4运行结果:
anyMatch:任意元素满足predicate
allMatch:所有元素满足predicate
noneMatch:没有元素满足predicate
运行结果:
收集是一个 最终操作,返回 Stream 中元素集合,返回值类型是集合(List、Set、Map)或 字符串
collection.mapping()对Stream中的每个元素进行映射,并将映射结果收集到一个新的集合(List)
collection.groupingBy() 分组统计:
collection.partitioningBy() 分区统计:
统计是一个最终操作,返回 Stream 中元素的各类统计信息,返回值类型是 XXXConsumer。
串行流需要执行952毫秒。
而并行流只需要执行545毫秒。