关于集合Stream流的笔记

背景:要根据集合里的组织id来过滤在这些组织下的用户,并将这些用户删除掉.

本来想着用多个for循环来操作,但想到写出来的代码比较复杂,就学着用stream流来解决了.

		//获取到需要过滤的组织集合
        List<String> filterOrgIds = Arrays.asList(StringUtils.split(bigDataColumn, ","));
        CloudBigDataExample cloudBigDataExample = new CloudBigDataExample();
        String query = keyValueMap.get(type);
        //具体业务字段映射关系字段映射关系
        cloudBigDataExample.createCriteria().andTypeEqualTo(query);
        List<CloudBigData> queryData = cloudBigDataMapper.selectByExample(cloudBigDataExample);
        JSONObject result = parseJsonByColumn(jsonObject, queryData);
        switch (query) {
            case "user":
                User user = result.toJavaObject(User.class);
                //过滤组织Id为空同步所有用户
                if (CollectionUtils.isEmpty(filterOrgIds)){
                    userOperation(user);
                    break;
                }
                UserExample userExample = new UserExample();
                List<User> users = userMapper.selectByExample(userExample);
                //过滤出所有user中集合id在filterOrgIds中的用户
                List<User> filterUsers = users.stream().filter(filterUser -> filterOrgIds.contains(filterUser.getOrgId())).collect(Collectors.toList());
                //如果获取到的用户不为空则删除这些用户
                if (CollectionUtils.isNotEmpty(filterUsers)){
                    List<String> filterUserIds = filterUsers.stream().map(filterUser -> filterUser.getId()).collect(Collectors.toList());
                    UserExample deleteUserExample = new UserExample();
                    deleteUserExample.createCriteria().andIdIn(filterUserIds);
                    userMapper.deleteByExample(deleteUserExample);
                }
                
                if (!filterOrgIds.contains(user.getOrgId())){
                    userOperation(user);
                }
                break;
            case "org":
                Organization organization = result.toJavaObject(Organization.class);
                //过滤组织Id为空同步所有组织
                if (CollectionUtils.isEmpty(filterOrgIds)){
                    orgOperation(organization);
                    break;
                }
                OrganizationExample organizationExample = new OrganizationExample();
                List<Organization> organizations = organizationMapper.selectByExample(organizationExample);
                List<Organization> filterOrganizations = organizations.stream().filter(filterOrganization -> filterOrgIds.contains(filterOrganization.getId())).collect(Collectors.toList());
                if (CollectionUtils.isNotEmpty(filterOrganizations)){
                    List<String> filterOrganizationIds = filterOrganizations.stream().map(filterOrganization -> filterOrganization.getId()).collect(Collectors.toList());
                    OrganizationExample deleteOrganizationExample = new OrganizationExample();
                    deleteOrganizationExample.createCriteria().andIdIn(filterOrganizationIds);
                    organizationMapper.deleteByExample(deleteOrganizationExample);
                }
                if (!filterOrgIds.contains(organization.getId())){
                    orgOperation(organization);
                }
                break;
              }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Stream遍历Map集合,可以通过调用Map接口的entrySet()方法获取一个Set集合,然后使用Stream的forEach()方法来遍历这个Set集合。在forEach()方法中,可以使用Lambda表达式来对每个Entry进行操作。以下是一个示例代码: ``` Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.entrySet().stream().forEach(entry -> { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println("Key: " + key + ", Value: " + value); }); ``` 在这个示例中,我们首先创建了一个包含键值对的Map集合。然后,通过调用entrySet()方法获取一个Set集合,再通过stream()方法将这个Set集合转换为一个Stream。接下来,使用forEach()方法来遍历这个Stream,对每个Entry进行操作。在Lambda表达式中,我们可以通过entry.getKey()和entry.getValue()方法分别获取键和值,并将它们打印出来。 这样,就可以使用Stream遍历Map集合了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Stream的方式遍历map,筛选数据](https://blog.csdn.net/qq_44716086/article/details/126332094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Java学习与复习笔记--Stream思想概述:](https://blog.csdn.net/gkx826/article/details/108543430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [怎么在java 8的map中使用stream](https://download.csdn.net/download/weixin_38719719/14853217)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值