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(
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 areAllUnique(List list){
Set set = new HashSet<>();
for (T t: list){
if (!set.add(t))
return false;
}
return true;
}
would be more efficient since it can give you false immediately when first non-unique element would be found.
This method could also be rewritten as (assuming non-parallel streams and thread-safe environment) using Stream#allMatch which also is short-circuit (returns false immediately for first element which doesn't fulfill provided condition)
public static boolean areAllUnique(List list){
Set set = new HashSet<>();
return list.stream().allMatch(t -> set.add(t));
}
or as @Holger mentioned in comment
public static boolean areAllUnique(List list){
return list.stream().allMatch(new HashSet<>()::add);
}