diff --git a/java-collections.iml b/java-collections.iml new file mode 100644 index 0000000..dd43669 --- /dev/null +++ b/java-collections.iml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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 32f8e35..6ee81f2 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 @@ -23,7 +23,14 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - return 0; + List list = getWords(text); + int lengthAllWords = 0; + + for (String element : list) { + lengthAllWords += element.length(); + } + + return lengthAllWords; } /** @@ -34,7 +41,7 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - return 0; + return getWords(text).size(); } /** @@ -44,7 +51,7 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - return 0; + return getUniqueWords(text).size(); } /** @@ -57,7 +64,14 @@ public int countNumberOfUniqueWords(String text) { */ @Override public List getWords(String text) { - return emptyList(); + List wordList = new ArrayList<>(); + String[] words = text.replaceAll("\\W", " ").split("\\s+"); + + for (String word : words) { + wordList.addAll(Collections.singleton(word)); + } + + return wordList; } /** @@ -70,7 +84,7 @@ public List getWords(String text) { */ @Override public Set getUniqueWords(String text) { - return emptySet(); + return new HashSet(getWords(text)); } /** @@ -82,7 +96,11 @@ public Set getUniqueWords(String text) { */ @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + Map map = new HashMap<>(); + for (String string : getWords(text)) { + map.put(string, Collections.frequency(getWords(text), string)); + } + return map; } /** @@ -95,6 +113,12 @@ public Map countNumberOfWordsRepetitions(String text) { */ @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + List sortedList = getWords(text); + if (direction.equals(Direction.ASC)){ + sortedList.sort(Comparator.comparing(String::length)); + } else { + sortedList.sort(Comparator.comparing(String::length).reversed()); + } + return sortedList; } } 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 e9b8957..d241688 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,10 +2,9 @@ import com.epam.izh.rd.online.helper.Direction; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static java.util.Collections.*; @@ -16,36 +15,48 @@ 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 emptyList(); + return Stream.of(text.replaceAll("\\W", " ").split("\\s+")) + .collect(Collectors.toList()); } @Override public Set getUniqueWords(String text) { - return emptySet(); + return new HashSet<>(getWords(text)); } @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + return getWords(text).stream() + .collect(Collectors.groupingBy(word -> word, Collectors.summingInt(word -> 1))); } @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + if (direction.equals(Direction.ASC)) { + return getWords(text).stream() + .sorted(Comparator.comparing(String::length)) + .collect(Collectors.toList()); + } + return getWords(text).stream() + .sorted(Comparator.comparing(String::length).reversed()) + .collect(Collectors.toList()); } }