In java 8, what's the best way to check if a List contains any duplicate?
My idea was something like:
list.size() != list.stream().distinct().count()
Is it the best way?
解决方案
Your code would need to iterate over all elements. If you want to make sure that there are no duplicates simple method like
public static boolean containsUnique(List list){
Set set = new HashSet<>();
for (T t: list){
if (!set.add(t))
return false;
}
return true;
}
would be more efficient.
This method could also be rewritten as (assuming non-parallel streams and thread-safe environment)
public static boolean containsUnique(List list){
Set set = new HashSet<>();
return list.stream().allMatch(t -> set.add(t));
}
or as @Holger mentioned in comment
public static boolean containsUnique(List list){
return list.stream().allMatch(new HashSet<>()::add);
}