From e45cd4b34365e78304976e4ea748272a447fa212 Mon Sep 17 00:00:00 2001 From: NiveditaMishraCoding <128554501+NiveditaMishraCoding@users.noreply.github.com> Date: Fri, 22 Sep 2023 15:07:58 -0700 Subject: [PATCH 1/2] Add 'duplicatesAndUnique' method to analyze haiku text characters. Closes #295 --- .../haikukata/TextProcessorJDK.java | 28 +++++++++---------- .../haikukata/TextProcessorJDKTest.java | 4 +-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/haiku-kata-solutions/src/main/java/org/eclipse/collections/haikukata/TextProcessorJDK.java b/haiku-kata-solutions/src/main/java/org/eclipse/collections/haikukata/TextProcessorJDK.java index 16bc3b9c..fd584d32 100644 --- a/haiku-kata-solutions/src/main/java/org/eclipse/collections/haikukata/TextProcessorJDK.java +++ b/haiku-kata-solutions/src/main/java/org/eclipse/collections/haikukata/TextProcessorJDK.java @@ -72,20 +72,20 @@ public record CharCountsDuplicatesUnique( public CharCountsDuplicatesUnique duplicatesAndUnique() { - // TODO: Find all of the alphabetic letters from this.getHaikuAsChars(), convert them to lowercase - // and count and store them in a Map. - // Hint: Look at IntStream's filter, map, mapToObj - // Hint: Also Look at Stream.collect, Collectors.groupingBy, Collectors.counting - Map chars = null; - - // TODO: Find all the Characters with duplicates in the map (value > 1) - // Hint: Look at entrySet, stream, filter, collect - // Hint: Also look at Collectors.toMap and using Map.Entry.getKey and Map.Entry.getValue as method references - Map duplicates = null; - - // TODO: Find all the unique Characters in the Map (value < 2) - // Hint: Look at entrySet, stream, filter, map, Map.Entry.getKey, collect, Collectors.toSet - Set unique = null; + Map chars = this.getHaikuAsChars() + .filter(Character::isLetter) // Filter alphabetic characters + .mapToObj(ch -> (char) ch) // Convert to characters + .map(Character::toLowerCase) // Convert to lowercase + .collect(Collectors.groupingBy(c -> c, Collectors.counting())); + + Map duplicates = chars.entrySet().stream() + .filter(entry -> 1L < entry.getValue()) // Filter duplicates + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + Set unique = chars.entrySet().stream() + .filter(entry -> 2L > entry.getValue()) // Filter unique + .map(Map.Entry::getKey) + .collect(Collectors.toSet()); // Returns a specialized "triple" type implemented as a Java Record (see CharCountsDuplicatesUnique above) return new CharCountsDuplicatesUnique(chars, duplicates, unique); diff --git a/haiku-kata-solutions/src/test/java/org/eclipse/collections/haikukata/TextProcessorJDKTest.java b/haiku-kata-solutions/src/test/java/org/eclipse/collections/haikukata/TextProcessorJDKTest.java index e2056066..4afb36cf 100644 --- a/haiku-kata-solutions/src/test/java/org/eclipse/collections/haikukata/TextProcessorJDKTest.java +++ b/haiku-kata-solutions/src/test/java/org/eclipse/collections/haikukata/TextProcessorJDKTest.java @@ -41,8 +41,8 @@ public void distinctLetters() Assertions.assertEquals("breakingthoupvmwcdflsy", distinctLetters); } -// @Test // Uncomment once duplicatesAndUnique is implemented for JDK -// @Tag("SOLUTION") + @Test + @Tag("SOLUTION") public void duplicatesAndUnique() { TextProcessorJDK.CharCountsDuplicatesUnique cdu = new TextProcessorJDK().duplicatesAndUnique(); From b1940842b52ccf0d10e477d8ac988bef97f58052 Mon Sep 17 00:00:00 2001 From: NiveditaMishraCoding <128554501+NiveditaMishraCoding@users.noreply.github.com> Date: Fri, 22 Sep 2023 15:23:52 -0700 Subject: [PATCH 2/2] Add 'getHaikuAsChars' method. --- .../org/eclipse/collections/haikukata/TextProcessorJDK.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/haiku-kata-solutions/src/main/java/org/eclipse/collections/haikukata/TextProcessorJDK.java b/haiku-kata-solutions/src/main/java/org/eclipse/collections/haikukata/TextProcessorJDK.java index fd584d32..b782b615 100644 --- a/haiku-kata-solutions/src/main/java/org/eclipse/collections/haikukata/TextProcessorJDK.java +++ b/haiku-kata-solutions/src/main/java/org/eclipse/collections/haikukata/TextProcessorJDK.java @@ -30,9 +30,7 @@ public String getHaiku() public IntStream getHaikuAsChars() { - // TODO: Create an IntStream representing the chars from this.getHaiku() - // Hint: Look at the chars() method on the String class - return null; + return this.getHaiku().chars(); } public List> topLetters()