使用番石榴从列表中删除重复项

2022-09-01 07:11:40

我们如何在番石榴api的帮助下从列表中删除重复项?

目前我正在关注这个:

private List<T> removeDuplicate(List<T> list){
return new ArrayList<T>(new LinkedHashSet<T>(list));
}

答案 1

也许最有效的方法是 ,它消除了重复项并保留了迭代顺序。ImmutableSet.copyOf(list).asList()

(但是你的实现几乎同样有效,并且不会抛出空值,以防万一你真的想要在集合中使用空值。LinkedHashSet


答案 2

我喜欢Louis的答案,因为它的简单性(因为它是唯一不需要2次完整迭代的答案),但不幸的是,在现实世界中,你经常会遇到确实发生的情况。下面是一个稍长的空安全版本:null

ImmutableSet.copyOf(
    Iterables.filter(
        list, Predicates.not(Predicates.isNull()))).asList();

或者,使用静态导入:

copyOf(filter(list, not(isNull()))).asList();

当然,您需要意识到,所有值都将从列表中丢失。null