Java8 Stream 合并集合、分组、标记重复数据并处理职位

本教程展示如何使用 Java8 Stream 合并两个集合、根据条件分组、标记重复数据,并将重复数据的职位处理成列表,最后将结果转换为 Page 对象。

示例代码:

List<VillagePartyOrgVO> list1 = new ArrayList<>(); // 第一个集合
List<VillagePartyOrgVO> list2 = new ArrayList<>(); // 第二个集合

// 合并两个集合
List<VillagePartyOrgVO> mergedList = Stream.concat(list1.stream(), list2.stream())
        .collect(Collectors.toList());

// 根据memCode或姓名+身份证分组
Map<String, List<VillagePartyOrgVO>> groupedMap = mergedList.stream()
        .collect(Collectors.groupingBy(vo -> StringUtils.isNotBlank(vo.getMemCode()) ? vo.getMemCode() : vo.getName() + vo.getIdCard()));

// 对重复数据进行标记,并把有标记的重复数据的职位处理成list集合
groupedMap.values().forEach(list -> {
    Map<String, List<VillagePartyOrgVO>> typeGroupMap = list.stream().collect(Collectors.groupingBy(VillagePartyOrgVO::getType));
    typeGroupMap.values().forEach(typeGroupList -> {
        if (typeGroupList.size() > 1) {
            typeGroupList.forEach(vo -> vo.setDuplicate(true));
            List<String> positionList = typeGroupList.stream().map(VillagePartyOrgVO::getPosition).collect(Collectors.toList());
            typeGroupList.forEach(vo -> vo.setPositionList(positionList));
        }
    });
});

// 把最后的结果list转成page对象
Page<VillagePartyOrgVO> page = new PageImpl<>(mergedList, PageRequest.of(0, mergedList.size()), mergedList.size());

代码解释:

  1. 合并两个集合: 使用 Stream.concat() 方法将两个集合的 Stream 合并成一个新的 Stream,然后使用 collect(Collectors.toList()) 方法将其转换为 List。
  2. 根据memCode或姓名+身份证分组: 使用 groupingBy() 方法根据条件对数据进行分组。如果 memCode 不为空,则根据 memCode 分组;否则根据 nameidCard 的组合进行分组。
  3. 标记重复数据并处理职位: 遍历每个分组,根据 type 属性再次分组,如果同一个 type 的数据数量超过 1,则标记为重复数据,并将所有重复数据的职位存入一个 List 中。
  4. 将结果转换为 Page 对象: 使用 PageImpl() 方法将最终的 List 转换为 Page 对象。

注意:

  • 为了完成代码,需要引入以下依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  • VillagePartyOrgVO 类需要包含 memCode, name, idCard, type, position, duplicatepositionList 属性。

通过以上步骤,我们就可以使用 Java8 Stream 对两个集合进行合并、分组、标记重复数据并处理职位,最终得到一个 Page 对象。

Java8 Stream 合并集合、分组、标记重复数据并处理职位 - 详细示例

原文地址: https://www.cveoy.top/t/topic/nuA1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录