要求一个表中的多条数据,根据id过滤,重复数据只取第一条
List<Object> collect = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getId()))), ArrayList::new)).get(0)
去重并且取第一条
list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getId()))), ArrayList::new))
楼上答主可能理解错意思了,只需要这样就可以了,默认取的是第一条
假定表中取出来是这个数据:
@Getter
@Setter
static class SomeObject {
private Long id;
// ... 其他属性
}
简单易懂的写法:
static List<SomeObject> filter(List<SomeObject> source) {
Set<Long> idSet = new HashSet<>(source.size());
List<SomeObject> target = new ArrayList<>(source.size());
for (final SomeObject obj : source) {
// 已经包含了这个 id 的数据
if (idSet.contains(obj.getId())) {
continue;
}
// 当前还未包含这个 id 的数据
target.add(obj);
idSet.add(obj.getId());
}
return target;
}
15 回答8.4k 阅读
8 回答6.2k 阅读
5 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
hashset