Java 8,流查找重复元素

2022-08-31 09:34:40

我试图列出整数列表中的重复元素,例如,

List<Integer> numbers = Arrays.asList(new Integer[]{1,2,1,3,4,4});    

使用流 jdk 8。有没有人尝试过。要删除重复项,我们可以使用 distinct() api。但是如何找到重复的元素?任何人都可以帮我吗?


答案 1

您可以使用 Collections.frequency

numbers.stream().filter(i -> Collections.frequency(numbers, i) >1)
                .collect(Collectors.toSet()).forEach(System.out::println);

答案 2

基本示例。上半部分构建频率图,后半部分将其简化为过滤列表。可能不如戴夫的答案有效,但更通用(比如如果你想准确地检测两个等等)。

List<Integer> duplicates = IntStream.of( 1, 2, 3, 2, 1, 2, 3, 4, 2, 2, 2 )
   .boxed()
   .collect( Collectors.groupingBy( Function.identity(), Collectors.counting() ) )
   .entrySet()
   .stream()
   .filter( p -> p.getValue() > 1 )
   .map( Map.Entry::getKey )
   .collect( Collectors.toList() );

推荐