JDK8 收集Stream流中的结果

 目录

Stream流中的结果到集合中

Stream流中的结果到数组中

对流中数据进行聚合计算

1. 获取最大值

2. 获取最小值

3. 求总和

4. 平均值

5. 统计数量

对流中数据进行分组

对流中数据进行多级分组

对流中数据进行分区 

对流中数据进行拼接


Stream流中的结果到集合中

Stream流提供 collect 方法,其参数需要一个 java.util.stream.Collector<T,A, R> 接口对象来指定收集到哪种集合中

public static <T> Collector<T, ?, List<T>> toList() :转换为 List 集合。
public static <T> Collector<T, ?, Set<T>> toSet() :转换为 Set 集合。

// 将流中数据收集到集合中
    @Test
    public void testStreamToCollection() {
        Stream<String> stream = Stream.of("a", "b", "c","d","e");
         /*List<String> list = stream.collect(Collectors.toList());
         Set<String> set = stream.collect(Collectors.toSet());*/
        ArrayList<String> arrayList = stream.collect(Collectors.toCollection(ArrayList::new));
        System.out.println(arrayList);
        HashSet<String> hashSet = stream.collect(Collectors.toCollection(HashSet::new));
        System.out.println(hashSet);
    }

Stream流中的结果到数组中

Stream提供 toArray 方法来将结果放到一个数组中,返回值类型是Object[]的:

Object[] toArray();

    @Test
    public void testStreamToArray() {
        Stream<String> stream = Stream.of("a", "b", "c","d","e");
        String[] strings = stream.toArray(String[]::new);
        for (String str : strings) {
            System.out.println(str);
        }
    }

对流中数据进行聚合计算

当我们使用Stream流处理数据后,可以像数据库的聚合函数一样对某个字段进行操作。

例如:获取最大值,获取最小值,求总和,平均值,统计数量

1. 获取最大值

Stream<Student> studentStream = Stream.of(
                new Student("小张", 58, 95),
                new Student("小李", 56, 88),
                new Student("小王", 56, 99),
                new Student("小明", 52, 77));
// 获取最大值
Optional<Student> collect = studentStream.collect(Collectors.maxBy((o1, o2) ->o1.getScore() - o2.getScore()));
System.out.println(collect.get());

2. 获取最小值

Stream<Student> studentStream = Stream.of(
                new Student("小张", 58, 95),
                new Student("小李", 56, 88),
                new Student("小王", 56, 99),
                new Student("小明", 52, 77));
// 获取最小值
Optional<Student> collect = studentStream.collect(Collectors.minBy((o1, o2) ->o1.getScore() - o2.getScore()));
System.out.println(collect.get());

3. 求总和

Stream<Student> studentStream = Stream.of(
                new Student("小张", 58, 95),
                new Student("小李", 56, 88),
                new Student("小王", 56, 99),
                new Student("小明", 52, 77));
// 求总和
int sumAge = studentStream.collect(Collectors.summingInt(s -> s.getAge()));
System.out.println("sumAge = " + sumAge);

4. 平均值

Stream<Student> studentStream = Stream.of(
                new Student("小张", 58, 95),
                new Student("小李", 56, 88),
                new Student("小王", 56, 99),
                new Student("小明", 52, 77));
// 平均值
double avgScore = studentStream.collect(Collectors.averagingInt(s -> s.getScore()));
System.out.println("avgScore = " + avgScore);

5. 统计数量

Stream<Student> studentStream = Stream.of(
                new Student("小张", 58, 95),
                new Student("小李", 56, 88),
                new Student("小王", 56, 99),
                new Student("小明", 52, 77));
// 统计数量
Long count = studentStream.collect(Collectors.counting());
System.out.println("count = " + count);

对流中数据进行分组

当我们使用Stream流处理数据后,可以根据某个属性将数据分组

对流中数据进行多级分组

对流中数据进行分区 

Collectors.partitioningBy 会根据值是否为true,把集合分割为两个列表,一个true列表,一个false列表。

对流中数据进行拼接

Collectors.joining 会根据指定的连接符,将所有元素连接成一个字符串。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值