JAVA8新特性之Stream流的相关操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


记录

主要是记录我书写代码中关于steam流的相关运用

Stream流的一些操作

1.stream流中anyMatch

stream流中anyMatch 只要有一个满足条件就返回true

        User u1= new User(1, "A", 10);
        User u2 = new User (2, "B", 12);
        User u3 = new User (3, "C", 14);
        User u4 = new User (4, "D", 12);
        List<User> list = Arrays.asList(u1, u2, u3, u4);
        // list中有年龄大于13的返回true
        boolean flag = list.stream().anyMatch(item -> item.getAge() > 13);
        System.out.println(flag);

2.steam中的collect

steam中的.collect 取出某个对象中的某个属性返回为一个分隔符隔开的字符串

List<String> idList;
  //将集合['','','']处理成('','','')
        String idsNew = idList.stream().map((id) -> "'"+id+"'").collect(Collectors.joining(",", "(", ") "));
 //如果只是想变成以逗号或者其他符号的字符串
         String ids = idList.stream().map((id) -> "'"+id+"'").collect(Collectors.joining(","));

该处使用的url网络请求的数据。


3.steam中的filter

stream().filter()的用法 过滤List对象(查找符合对象集合)我一般与collect连用

//查出自己的对象集合
List<MenuInfo> menuInfos = authJdbcDao.getRoleMenus(roleId);
//返回对象集合halfChecked属性等于0的集合
  List<MenuInfo> roleMenuCodes = menuInfos.stream().filter(menu -> menu.getHalfChecked() == 0).collect(Collectors.toList());

4.steam中的forEach

就是一个遍历的作用

List<TsmRoleUrlGroup> newRelas = new ArrayList<TsmRoleUrlGroup>(rela.getGroupIds().size());
        rela.getGroupIds().stream().forEach((groupId) -> {
            TsmRoleUrlGroup tsmRoleUrlGroup = new TsmRoleUrlGroup();
            tsmRoleUrlGroup.setRoleId(rela.getRoleId());
            tsmRoleUrlGroup.setGroupId(groupId);
            newRelas.add(tsmRoleUrlGroup);
        });

5.steam中的distinct()

去除数据集合中重复的对象或者值

//传进来的参数
List<Integer> roleIds = rela.getRoleIds();
//对筛选出来的值进行去重处理
       List<Integer> roleNewIds = new ArrayList<>();
            roleNewIds.addAll(roleIds);
            roleNewIds.stream().filter(e -> auditRoleIds.contains(e) && (!oldRoleIds.contains(e))).distinct().forEach(e -> {
                        roleAttaches.add(ReviewRoleAttach.builder().roleId(e).status(1).build());
                        roleIds.remove(e);
                    }
            );

6.steam中的map 与 flatMap

map 与 flatMap 都是用于转换已有的元素为其它元素,区别点在于:
map 必须是一对一的,即每个元素都只能转换为一个新的元素。
flatMap 可以是一对多的,即每个元素都可以转换为一个或者多个新的元素。
map里面如果加了{}(e->{retrun “111”;})就必须要返回值如果不加里面可以直接写逻辑;

 List<String> ids = Arrays.asList("205","105","308","469","627","193","111");
    // 使用流操作
    List<User> results = ids.stream()
            .map(s -> User.builder().id(Integer.valueOf(s)).build())
            .collect(Collectors.toList());
    System.out.println(results);
//输出结果[User(id=205), User(id=105), User(id=308), User(id=469), User(id=627), User(id=193), User(id=111)]
 List<String> sentences = Arrays.asList("hello world","Jia Gou Wu Dao");
    // 使用流操作
    List<String> results = sentences.stream()
            .flatMap(sentence -> Arrays.stream(sentence.split(" ")))
            .collect(Collectors.toList());
    System.out.println(results);
//输出结果[hello, world, Jia, Gou, Wu, Dao]结果列表中元素个数是比原始列表元素个数要多的

总结

目前只用到了这些后面再增加

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值