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

前端 未结 5 2108
猫巷女王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 07:45

    I used the following:
    1. return list.size() == new HashSet<>(list).size();.

    I'm not sure how it compares to:
    2. return list.size() == list.stream().distinct().count();
    and
    3. return list.stream().sequential().allMatch(new HashSet<>()::add);
    in terms of performance.

    The last one (#3) has possibility to handle not only collections (e.g. lists), but also streams (without explicitly collecting them).

    Upd.: The last one (#3) seems to be the best not only because it can handle pure streams, but also because it stops on the first duplicate (while #1 and #2 always iterate till the end) — as @Pshemo said in comment.

提交回复
热议问题