Lambda表达式

前言

Lambda 表达式本质是一个匿名函数,用于把函数作为参数,传入方法中,实现函数式编程风格。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。

目录

一、排序

二、遍历

 三、Predicate接口

四、Function 

 五、Comparator

六、Stream流

七、Collect收集

八、Statistics统计

九、ParallelStream并行流


一、排序

 没有学习Lambda表达式之前我们要实现排序功能,我们需要new一个Comparator接口的匿名实现类。

Lambda表达式_第1张图片

 上面代码用Lambda表达式可以写作:

Lambda表达式_第2张图片

二、遍历

forEach的两种遍历方式。

Lambda表达式_第3张图片

遍历结果:

 Lambda表达式_第4张图片

 三、Predicate接口

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);
			}
		});
	}
}

 结果:

Lambda表达式_第5张图片

四、Function 

Function 接口接受一个参数并生成结果。默认方法可用于将多个函数链接在一起( compose , andThen )

funcation1:变小写;

funcation2:字符串两端加<>

funcation3:变小写加<>(作用等同于:apply(before.apply(v)))

funcation4:变小写加<>(作用等同于:before.apply(apply()))

Lambda表达式_第6张图片

function3运行结果:

Lambda表达式_第7张图片

function4运行结果:

Lambda表达式_第8张图片

 五、Comparator

比较器接口,用于比较指定元素值的大小。 Java 8版本中,添加了多个新的 default 方法,用于比较器合 并、反转等操作。

comparator1:比较ASCII码

comparator2:比较长度

comparator3:先比内容再比长度

comparator4:comparator3的反转

Lambda表达式_第9张图片

 comparator3运行结果:Lambda表达式_第10张图片

 comparator4运行结果:

Lambda表达式_第11张图片

六、Stream流

anyMatch:任意元素满足predicate

allMatch:所有元素满足predicate

noneMatch:没有元素满足predicate

Lambda表达式_第12张图片

运行结果:

Lambda表达式_第13张图片

七、Collect收集

收集是一个 最终操作,返回 Stream 中元素集合,返回值类型是集合(List、Set、Map)或 字符串

Lambda表达式_第14张图片

 Lambda表达式_第15张图片

 collection.mapping()对Stream中的每个元素进行映射,并将映射结果收集到一个新的集合(List)

Lambda表达式_第16张图片

 Lambda表达式_第17张图片

collection.groupingBy() 分组统计:

 Lambda表达式_第18张图片

collection.partitioningBy() 分区统计:

 

八、Statistics统计

统计是一个最终操作,返回 Stream 中元素的各类统计信息,返回值类型是 XXXConsumer。

Lambda表达式_第19张图片

 Lambda表达式_第20张图片

 

九、ParallelStream并行流

串行流需要执行952毫秒。

Lambda表达式_第21张图片

而并行流只需要执行545毫秒。

Lambda表达式_第22张图片 

 

你可能感兴趣的:(java,开发语言)