You can extract duplicate elements from an array using Java 8 Streams by grouping elements and filtering those that appear more than once.
import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public class FindDuplicates { public static void main(String[] args) { int[] numbers = {1, 2, 3, 4, 2, 5, 6, 3, 7, 8, 1, 9}; List<Integer> duplicates = Arrays.stream(numbers) .boxed() // Convert int[] to Stream<Integer> .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())) // Count occurrences .entrySet() .stream() .filter(entry -> entry.getValue() > 1) // Keep only duplicates .map(Map.Entry::getKey) // Extract duplicate elements .collect(Collectors.toList()); System.out.println("Duplicate Elements: " + duplicates); } }
Output:
Duplicate Elements: [1, 2, 3]
Alternative: Using Set
for Better Performance
If the array is large, using a Set
avoids additional memory usage:
import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class FindDuplicatesWithSet { public static void main(String[] args) { int[] numbers = {1, 2, 3, 4, 2, 5, 6, 3, 7, 8, 1, 9}; Set<Integer> unique = new HashSet<>(); List<Integer> duplicates = Arrays.stream(numbers) .filter(n -> !unique.add(n)) // Add returns false if the element is already in the set .boxed() .distinct() // Remove duplicate duplicates .collect(Collectors.toList()); System.out.println("Duplicate Elements: " + duplicates); } }