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。但是如何找到重复的元素?任何人都可以帮我吗?
我试图列出整数列表中的重复元素,例如,
List<Integer> numbers = Arrays.asList(new Integer[]{1,2,1,3,4,4});
使用流 jdk 8。有没有人尝试过。要删除重复项,我们可以使用 distinct() api。但是如何找到重复的元素?任何人都可以帮我吗?
您可以使用 Collections.frequency
:
numbers.stream().filter(i -> Collections.frequency(numbers, i) >1)
.collect(Collectors.toSet()).forEach(System.out::println);
基本示例。上半部分构建频率图,后半部分将其简化为过滤列表。可能不如戴夫的答案有效,但更通用(比如如果你想准确地检测两个等等)。
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() );