java高级去重

新手上路,请多包涵

要求一个表中的多条数据,根据id过滤,重复数据只取第一条

阅读 2.1k
4 个回答
新手上路,请多包涵
 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;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题