How to check if exists any duplicate in Java 8 Streams?

前端 未结 5 2109
猫巷女王i
猫巷女王i 2020-12-01 07:26

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(         


        
5条回答
  •  隐瞒了意图╮
    2020-12-01 08:00

    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);
    }
    

提交回复
热议问题