Stream流 使用案例

发布时间:2024年01月19日

1 简单遍历
集合创建

List<Integer> list = Arrays.asList(1, 7, 3, 5, 1, 2, 9);
    	list.stream().forEach(System.out::print);

输出结果:1 7 3 5 1 2 9

数组创建

String[] array={"ab", "abc", "abcd", "abcde", "abcdef" };
Stream<String> stream = Arrays.stream(array);

2 筛选大于5的数值

2.1使用 collect() 方法和 Collectors.toList() 方法:

List<Integer> list = Arrays.asList(1, 7, 3, 5, 1, 2, 9);
List<Integer> result = list.stream()
    .filter(x -> x > 5)
    .collect(Collectors.toList());
System.out.println(result);

输出结果:[7, 9]

2.2使用 filter() 方法:

Stream<Integer> stream = list.stream();
stream.filter(x -> x > 5).forEach(System.out::print);

3 对整数数组每个元素加 5(map)

List<Integer> list = Arrays.asList(1, 7, 3, 5, 1, 2, 9);
list.stream().map(x->x+3).forEach(System.out::println);

输出结果:4 10 6 8 4 5 12

4 取最大值(max)

List<Integer> list = Arrays.asList(1, 7, 3, 5, 1, 2, 9);
Optional<Integer> max = list.stream().max(Integer::compareTo);
System.out.println(max.get());

输出结果:9

5 首字母大写(map)

List<String> list =Arrays.asList ("aa","vv");
		list.stream()
				.map(s -> Character.toUpperCase(s.charAt(0))+s.substring(1))
				.forEach(System.out::println);

输出结果: Aa Vv

6 字符串数组转整型数组(mapToInt)

List<String> list =Arrays.asList ("aa","vv");
int[] ints = list.stream().mapToInt(r -> r.length()).toArray();
System.out.println(Arrays.toString(ints));

输出结果:[2, 2]

7 把一个字符串数组转成另一种字符串数组(flatMap)

List<String> list =Arrays.asList ("aa","vv");
	list.stream().flatMap(s -> {
		// 将每个元素转换成一个stream
		String[] split = s.split(",");
		Stream<String> s2 = Arrays.stream(split);
		return s2;
	}).forEach(System.out::print);

输出结果:aavv

8 把一个有序数组转成无序(unorderd)

Arrays.asList("1", "2", "3", "4", "5")
                .parallelStream()
                .unordered()
                .forEach(r -> System.out.print(r + " "));

输出结果:3 5 4 2 1

9 去掉字符串数组中的重复字符串并获取前两个元素(limit,distinct )

String[] array = { "a", "b", "b", "c", "c", "d", "d", "e", "e"};
Arrays.stream(array).distinct().forEach(System.out::println);

输出结果:a b

10 对给定数组进行排序并从第五个之后开始,利用peek输出节点日志(peek,sorted,skip)

String[] array = { "a", "b", "b", "c", "c", "d", "d", "e", "e"};
             Arrays.stream(array)
					 .sorted()
					 .peek(e-> System.out.println("debug"))
					 .skip(5).
					 forEach(System.out::println);

debug debug debug debug debug debug d debug d debug e debug e

11 集合求最大值 乘积(reduce)


```java
List<Integer> list = Arrays.asList(9, 5, 2, 8, 19, 2);
	    // 求和方式1
Optional<Integer> sum = list.stream().reduce((x, y) -> x + y);
		// 求和方式2
Optional<Integer> sum2 = list.stream().reduce(Integer::sum);
		// 求和方式3
Integer sum3 = list.stream().reduce(0, Integer::sum);
        // 求乘积
Optional<Integer> product = list.stream().reduce((x, y) -> x * y);
        // 求最大值方式1
Optional<Integer> max = list.stream().reduce((x, y) -> x > y ? x : y);
		// 求最大值写法2
Integer max2 = list.stream().reduce(1, Integer::max);
        //求最大值的第三种写法
Optional<Integer> max1 = list.stream().max(Integer::compareTo);
System.out.println("list求和:" + sum.get() + "," + sum2.get() + "," + sum3);
System.out.println("list求积:" + product.get());
System.out.println("list求最大值:" + max.get() + "," + max2+","+max1);

输出结果:list求和:45,45,45 list求积:27360 list求最大值:19,19,19

12 将学生按照性别、年龄分组

Map<String, Map<Integer, List<Student>>> group = students.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.groupingBy(Student::getAge)));
System.out.println("将学生按照性别、年龄分组:");
group.forEach((k,v ) -> {
    System.out.println(k +":");
    v.forEach((k1,v1) -> {
        System.out.print("      " + k1 + ":" );
        v1.forEach(r -> System.out.print(r.getName() + ","));
        System.out.println();
    });
});

结果输出:将学生按照性别、年龄分组: female: 16:Allon,Alis, 12:Lucy,Jessie, male:
10:Mike,Jack

13 数组中每个元素加 5 后求总和

List<Integer> list = Arrays.asList(5, 8, 3, 6, 4);
		int collect = list.stream().collect(Collectors.reducing(0, x -> x + 5, (sum, b) -> sum + b));
		System.out.println( collect);

在这里插入图片描述

结果输出:51

findAny

找出 stream 中任何一个满足过滤条件的元素。

anyMatch

是否存在任意一个满足给定条件的元素。

allMatch

是否集合中所有元素都满足给定的条件,如果集合是空,则返回 true。

noneMatch

是否没有元素能匹配给定的条件,如果集合是空,则返回 true。

findFirst

找出第一个符合条件的元素。

collect(Collectors.summarizingInt(s -> s)

总信息

collect(Collectors.partitioningBy()

分区

文章来源:https://blog.csdn.net/qq_46154326/article/details/135660065
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。