Skip to content

Commit 44bb68f

Browse files
authored
BAEL-9260: Hashmap Implementation to Count the Occurrences of Each Ch… (#18599)
* BAEL-9260: Hashmap Implementation to Count the Occurrences of Each Character in Java * BAEL-9260: Hashmap Implementation to Count the Occurrences of Each Character in Java * BAEL-9260: Hashmap Implementation to Count the Occurrences of Each Character in Java
1 parent 05931ad commit 44bb68f

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.baeldung.countingchars;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.function.Function;
6+
import java.util.stream.Collectors;
7+
8+
public class CharacterFrequencyCounter {
9+
10+
public static Map<Character, Integer> countCharactersWithLoop(String input) {
11+
Map<Character, Integer> characterCountMap = new HashMap<>();
12+
13+
for (char ch : input.toCharArray()) {
14+
characterCountMap.put(ch, characterCountMap.getOrDefault(ch, 0) + 1);
15+
}
16+
17+
return characterCountMap;
18+
}
19+
20+
public static Map<Character, Integer> countCharactersWithStreams(String input) {
21+
return input.chars()
22+
.mapToObj(c -> (char) c)
23+
.collect(Collectors.groupingBy(
24+
Function.identity(),
25+
Collectors.collectingAndThen(Collectors.counting(), Long::intValue)
26+
));
27+
}
28+
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.baeldung.countingchars;
2+
3+
import org.junit.Test;
4+
5+
import java.util.Map;
6+
7+
import static org.junit.Assert.assertEquals;
8+
9+
public class CharacterFrequencyCounterUnitTest {
10+
11+
@Test
12+
public void givenSimpleInput_whenCountingCharactersWithLoop_thenReturnsCorrectFrequencies() {
13+
String input = "test";
14+
Map<Character, Integer> result = CharacterFrequencyCounter.countCharactersWithLoop(input);
15+
16+
assertEquals(Integer.valueOf(2), result.get('t'));
17+
assertEquals(Integer.valueOf(1), result.get('e'));
18+
assertEquals(Integer.valueOf(1), result.get('s'));
19+
assertEquals(3, result.size());
20+
}
21+
22+
@Test
23+
public void givenSimpleInput_whenCountingCharactersWithStreams_thenReturnsCorrectFrequencies() {
24+
String input = "test";
25+
Map<Character, Integer> result = CharacterFrequencyCounter.countCharactersWithStreams(input);
26+
27+
assertEquals(Integer.valueOf(2), result.get('t'));
28+
assertEquals(Integer.valueOf(1), result.get('e'));
29+
assertEquals(Integer.valueOf(1), result.get('s'));
30+
assertEquals(3, result.size());
31+
}
32+
33+
34+
}

0 commit comments

Comments
 (0)