From d6e0a16dc64513a655f4804625725d0b7c159725 Mon Sep 17 00:00:00 2001 From: Victor Tormyshev Date: Tue, 3 Dec 2019 22:06:24 +0400 Subject: [PATCH 1/3] implement SimpleTextStatisticsAnalyzer --- .../service/SimpleTextStatisticsAnalyzer.java | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java b/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java index 52d197e..7c9f364 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java @@ -21,7 +21,8 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - return 0; + text = text.replaceAll("[\\W\\p{Space}]", ""); + return text.length(); } /** @@ -32,7 +33,8 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - return 0; + List allWords = getWords(text); + return allWords.size(); } /** @@ -42,7 +44,9 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - return 0; + List allWords = getWords(text); + Set uniqueWords = new HashSet<>(allWords); + return uniqueWords.size(); } /** @@ -55,7 +59,14 @@ public int countNumberOfUniqueWords(String text) { */ @Override public List getWords(String text) { - return new ArrayList<>(); + List listOfWords = new ArrayList<>(); + String [] arrayOfWords = text.split("[\\p{Punct}\\p{Space}]"); + for (String s : arrayOfWords) { + if (s != null && s.length() > 0) { + listOfWords.add(s); + } + } + return listOfWords; } /** @@ -68,7 +79,8 @@ public List getWords(String text) { */ @Override public Set getUniqueWords(String text) { - return new HashSet<>(); + List allWords = getWords(text); + return new HashSet<>(allWords); } /** @@ -80,7 +92,18 @@ public Set getUniqueWords(String text) { */ @Override public Map countNumberOfWordsRepetitions(String text) { - return Collections.emptyMap(); + List allWords = getWords(text); + Map countWordsRepetitionsMap = new LinkedHashMap<>(); + for (String s : allWords) { + int repetitionCounter = 0; + for (String string : allWords) { + if (s.equals(string)) { + repetitionCounter++; + } + } + countWordsRepetitionsMap.put(s, repetitionCounter); + } + return countWordsRepetitionsMap; } /** @@ -93,6 +116,15 @@ public Map countNumberOfWordsRepetitions(String text) { */ @Override public List sortWordsByLength(String text, Direction direction) { - return new ArrayList<>(); + ArrayList allWords = (ArrayList) getWords(text); + + class wordsLengthComparator implements Comparator { + @Override + public int compare(String o1, String o2) { + return direction == Direction.ASC ? o1.length() - o2.length() : o2.length() - o1.length(); + } + } + allWords.sort(new wordsLengthComparator()); + return allWords; } } From 94a140c1b03483b0e010b404f6f6d3b49922781c Mon Sep 17 00:00:00 2001 From: Victor Tormyshev Date: Wed, 4 Dec 2019 20:13:47 +0400 Subject: [PATCH 2/3] use frequency() and anonymous class --- .../service/SimpleTextStatisticsAnalyzer.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java b/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java index 7c9f364..2bdd109 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java @@ -95,12 +95,7 @@ public Map countNumberOfWordsRepetitions(String text) { List allWords = getWords(text); Map countWordsRepetitionsMap = new LinkedHashMap<>(); for (String s : allWords) { - int repetitionCounter = 0; - for (String string : allWords) { - if (s.equals(string)) { - repetitionCounter++; - } - } + int repetitionCounter = Collections.frequency(allWords, s); countWordsRepetitionsMap.put(s, repetitionCounter); } return countWordsRepetitionsMap; @@ -117,14 +112,12 @@ public Map countNumberOfWordsRepetitions(String text) { @Override public List sortWordsByLength(String text, Direction direction) { ArrayList allWords = (ArrayList) getWords(text); - - class wordsLengthComparator implements Comparator { + allWords.sort(new Comparator() { @Override public int compare(String o1, String o2) { return direction == Direction.ASC ? o1.length() - o2.length() : o2.length() - o1.length(); } - } - allWords.sort(new wordsLengthComparator()); + }); return allWords; } } From decbadff06a63977e535bd376cb1f975a2d38c9f Mon Sep 17 00:00:00 2001 From: Victor Tormyshev Date: Thu, 5 Dec 2019 20:36:13 +0400 Subject: [PATCH 3/3] implement Stream-based methods --- .../service/SimpleTextStatisticsAnalyzer.java | 27 +++++++------------ .../StreamApiTextStatisticsAnalyzer.java | 26 +++++++++++------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java b/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java index 2bdd109..d62a097 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java @@ -21,8 +21,12 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - text = text.replaceAll("[\\W\\p{Space}]", ""); - return text.length(); + List allWords = getWords(text); + int sumLengthOfWords = 0; + for (String s : allWords) { + sumLengthOfWords += s.length(); + } + return sumLengthOfWords; } /** @@ -33,8 +37,7 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - List allWords = getWords(text); - return allWords.size(); + return getWords(text).size(); } /** @@ -44,9 +47,7 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - List allWords = getWords(text); - Set uniqueWords = new HashSet<>(allWords); - return uniqueWords.size(); + return getUniqueWords(text).size(); } /** @@ -59,14 +60,7 @@ public int countNumberOfUniqueWords(String text) { */ @Override public List getWords(String text) { - List listOfWords = new ArrayList<>(); - String [] arrayOfWords = text.split("[\\p{Punct}\\p{Space}]"); - for (String s : arrayOfWords) { - if (s != null && s.length() > 0) { - listOfWords.add(s); - } - } - return listOfWords; + return new ArrayList<>(Arrays.asList(text.split("\\W+"))); } /** @@ -79,8 +73,7 @@ public List getWords(String text) { */ @Override public Set getUniqueWords(String text) { - List allWords = getWords(text); - return new HashSet<>(allWords); + return new HashSet<>(getWords(text)); } /** diff --git a/src/main/java/com/epam/izh/rd/online/service/StreamApiTextStatisticsAnalyzer.java b/src/main/java/com/epam/izh/rd/online/service/StreamApiTextStatisticsAnalyzer.java index 1e3c262..14ede4a 100644 --- a/src/main/java/com/epam/izh/rd/online/service/StreamApiTextStatisticsAnalyzer.java +++ b/src/main/java/com/epam/izh/rd/online/service/StreamApiTextStatisticsAnalyzer.java @@ -2,9 +2,8 @@ import com.epam.izh.rd.online.helper.Direction; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; /** * Данный класс обязан использовать StreamApi из функционала Java 8. Функциональность должна быть идентична @@ -13,36 +12,43 @@ public class StreamApiTextStatisticsAnalyzer implements TextStatisticsAnalyzer { @Override public int countSumLengthOfWords(String text) { - return 0; + return getWords(text).stream().mapToInt(String::length).sum(); } @Override public int countNumberOfWords(String text) { - return 0; + return (int) getWords(text).stream().count(); } @Override public int countNumberOfUniqueWords(String text) { - return 0; + + return (int) getUniqueWords(text).stream().count(); } @Override public List getWords(String text) { - return null; + List listOfWords = new ArrayList<>(); + String [] arrayOfWords = text.split("\\W+"); + Arrays.stream(arrayOfWords).forEach(listOfWords::add); + return listOfWords; } @Override public Set getUniqueWords(String text) { - return null; + return getWords(text).stream().collect(Collectors.toSet()); } @Override public Map countNumberOfWordsRepetitions(String text) { - return null; + return getUniqueWords(text).stream().collect(Collectors.toMap(e -> e, + e -> Collections.frequency(getWords(text), e))); } @Override public List sortWordsByLength(String text, Direction direction) { - return null; + return getWords(text).stream().sorted + ((o1, o2) -> direction == Direction.ASC ? o1.length() - o2.length() : o2.length() - o1.length()) + .collect(Collectors.toList()); } }