Stream流的终止操作

454 阅读2分钟

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

这是Stream操作的中的最后一步,终止操作,如果没有看过前面的创建和中间操作的同学可以去看看。ok,接下来我们直接看终止操作有哪些和他们的用法。
Stream终止操作大概分为这几种:

查找与匹配
映射
归约
收集

一、查找与匹配

allMatch——检查是否匹配所有元素
anyMatch——检查是否至少匹配一个元素
noneMatch——检查是否没有匹配的元素
findFirst——返回第一个元素
findAny——返回当前流中的任意元素
count——返回流中元素的总个数
max——返回流中最大值
min——返回流中最小值

1、allMatch

 boolean b1 = emps.stream()
                .allMatch((e) -> e.getName().contains("五"));
        System.out.println(b1);

二、映射

方法描述
map(Function mapper)接收 Lambda 将元素转换成其他 形式 或提取信息 。接收 一个函数作为参数 该函数会被应用到每个元素上, 并将其映射成一个行的元素
flatMap接收一个函数作为参数 将流中的每个值 都换成另一个流 然后把所有的流 连成一个流
map:  将每个字符串变大写
	List<String> list = Arrays.asList("aaa", "bbbb", "sss", "ccc");
	list.stream().map((str) -> str.toLowerCase()).forEach(System.out::println);
floatMap:  将其中字符串变大写按字母升序排列
//        会合并每一个流  转为一个流   参考:list.allAll();
list.stream().flatMap(TestStream2::filterCharacter).forEach(System.out::println);
public static Stream<Character> filterCharacter(String str) {
	List<Character> list = new ArrayList<>();
		for (Character c : str.toCharArray()) {
		list.add(c);
	}
	return list.stream();
}

三、归约

reduce(T iden, BinaryOperator b) 可以将流中元素反复结合起来,得到一个值。
返回 T
reduce(BinaryOperator b) 可以将流中元素反复结合起来,得到一个值。
返回 Optional

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10); // 0 -- (0,1)->0+1 -> 1 (1,2)->1+2 -> 3 (3,3) -> 3+3 Integer reduce = list.stream().reduce(0, (x, y) -> x + y); // map - reduce 模式 Optional<Integer> reduce1 = employees.stream().map(Employee::getMoney).reduce(Integer::sum);

四 收集

collect(Collector c) | 将流转换为其他形式。接收一个 Collector |

List<String> collect = employees.stream().map(Employee::getName).collect(Collectors.toList());
	System.out.println(collect);
	Set<String> collect1 = employees.stream().map(Employee::getName).collect(Collectors.toSet());
	System.out.println(collect1);
	HashSet<String> collect2 = employees.stream().map(Employee::getName).collect(Collectors.toCollection(HashSet::new));
	System.out.println(collect2);
//        平均值
	Double collect3 = employees.stream().collect(Collectors.averagingInt(Employee::getMoney));
	System.out.println(collect3);
//        总和
	IntSummaryStatistics collect4 = employees.stream().collect(Collectors.summarizingInt(Employee::getMoney));
	
//最大值
	employees.stream().map(Employee::getMoney).collect(Collectors.maxBy(Integer::compareTo));
//        最小值
	Optional<Integer> collect5 = 	employees.stream().map(Employee::getMoney).collect(Collectors.minBy(Integer::compare));