根据集合对象(可以同时满足多个)的属性去重

集合根据对象的属性去重

 List<TProjectTeam> tProjectTeams = facilityMapper.selectProjectNameByBase(projectTeamName)
 			.stream()
 			.collect(Collectors.collectingAndThen(
                 Collectors.toCollection(() -> new TreeSet<>(
                    Comparator.comparing(
                          tProjectTeam -> tProjectTeam.getProjectTeamName()))), ArrayList::new));

整体去重。直接
distinct()

### Java Stream API 实现多条件分组并 当处理复杂的数据集时,可以利用 `Stream` 的强大功能来实现基于多个字段的分组和操作。下面展示了一个具体的例子,在该实例中,假设有一个包含用户信息的对象列表,并希望按照用户的部门和地区两个属性进行分组,同时复项。 #### 定义实体类 User 为了便于理解,先定义一个简单的 `User` 类作为测试对象: ```java public class User { private String id; private String name; private String department; private String region; // 构造函数, getter 和 setter 方法省略... } ``` #### 使用 Collectors.groupingBy 进行分组与 通过组合使用 `Collectors.groupingBy()` 及自定义比较逻辑可达到目的。这里采用双分组策略——首先按区域划分,再依据部门进一步细分;每一步都应用过滤器以排除已存在的记录[^1]。 ```java import java.util.*; import java.util.stream.Collectors; @Test public void dis2() { List<User> users = Arrays.asList( new User("001", "Alice", "HR", "North"), new User("002", "Bob", "Engineering", "South"), new User("003", "Charlie", "HR", "East"), new User("004", "David", "Marketing", "West"), new User("005", "Eve", "HR", "North") // Duplicate entry with different ID but same dept and region as Alice. ); Map<String, Map<String, Optional<User>>> groupedUsers = users.stream() .collect(Collectors.groupingBy( User::getRegion, Collectors.groupingBy( User::getDepartment, Collectors.reducing((existing, current) -> existing)))); // 将嵌套映射转换回扁平化的唯一用户集合 Set<User> uniqueUsers = groupedUsers.values().stream() .flatMap(deptMap -> deptMap.values().stream()) .map(Optional::orElseThrow) .collect(Collectors.toSet()); System.out.println(uniqueUsers); } ``` 上述代码片段展示了如何运用流式编程模型中的收集器来进行多层次聚合运算,最终得到既满足指定维度约束又不含冗余条目的目标数据结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值