import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class DuplicateCharacters {
public static void main(String[] args) {
String str = "programming";
Map<Character, Long> charCountMap = str.chars() // Convert to IntStream
.mapToObj(c -> (char) c) // Convert int to Character
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); // Count occurrences
System.out.println("Duplicate Characters:");
charCountMap.entrySet().stream()
.filter(entry -> entry.getValue() > 1) // Keep only duplicates
.forEach(entry -> System.out.println(entry.getKey() + " -> " + entry.getValue()));
}
}
Output:
Duplicate Characters: r -> 2 g -> 2 m -> 2
Alternative: Using Set for Better Performance
import java.util.HashSet;
import java.util.Set;
public class DuplicateCharactersUsingSet {
public static void main(String[] args) {
String str = "programming";
Set<Character> uniqueChars = new HashSet<>();
Set<Character> duplicates = str.chars()
.mapToObj(c -> (char) c)
.filter(c -> !uniqueChars.add(c)) // Add returns false if already present
.collect(Collectors.toSet());
System.out.println("Duplicate Characters: " + duplicates);
}
}
