Java Stream流实现嵌套列表无重复输出:1999年出生人群爱好筛选
代码问题定位
- 类型转换不一致:两次
sorted操作中分别将元素强转为person和Individu两种不同类型,只要集合元素不是同时兼容这两个类型,运行时会抛出类型转换异常,是结果不符合预期的核心原因。 - 缺少去重逻辑:爱好拍平后直接收集为List,未做去重处理,因此会保留重复项。
修改后代码
// 假设集合元素统一类型为Person,若实际是Individu可自行替换类型 List<String> question7 = ListPerson.stream() .filter(p -> p.getDateDeNaissance().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().getYear() == 1999) // 统一用方法引用避免强转,按身高倒序 .sorted(Comparator.comparingDouble(Person::getHeight).reversed()) .limit(20) // 按体重倒序 .sorted(Comparator.comparingDouble(Person::getWeight).reversed()) .limit(5) .map(Person::getListHobbys) .flatMap(Collection::stream) // 新增去重步骤 .distinct() .collect(Collectors.toList());
补充说明
如果不需要保留爱好的出现顺序,也可以去掉distinct(),将最终收集逻辑替换为Collectors.toSet(),同样可以实现去重效果。
内容的提问来源于stack exchange,提问作者jaki hart
相关产品推荐
相关产品推荐

