Java1.8新特性Stream流

简介

Stream是Java 8新增的重要特性, 它提供函数式编程支持并允许以管道方式操作集合. 流操作会遍历数据源, 使用管道式操作处理数据后生成结果集合, 这个过程通常不会对数据源造成影响。

​ 同时stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。在Stream中的操作每一次都会产生新的流,内部不会像普通集合操作一样立刻获取值,而是惰性取值,只有等到用户真正需要结果的时候才会执行。

Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的。

过滤

//list  list2 为数据源
//取list中name不包含list2的数据集合并过滤掉名字为‘专家的’的数据
        List<Grade> collect = list.stream()
                .filter(p -> list2.stream().noneMatch(p2 -> p2.getName().equals(p.getName()))).filter(item->!item.getName().equals("专家"))
                .collect(Collectors.toList());

分组

分组取最某字段最大值的数据集合

//根据no分组取score最大值的数据集合
//去重取最大值的数据集合       

 List<Grade> collect1 = collect.stream()
                .collect(Collectors.groupingBy(
                        Grade::getNo,
                        Collectors.maxBy(Comparator.comparingDouble(Grade::getScore))))
                .values()
                .stream()
                .map(Optional::get)
                .collect(Collectors.toList());

map

 List<User> users = // 用户列表初始化
 
        List<UserDTO> userDTOs = users.stream()
            .map(user -> new UserDTO(user.getName(), user.getAge()))
            .collect(Collectors.toList());
 
        // userDTOs 包含了转换后的UserDTO对象列表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值