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..8684709 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 @@ -2,7 +2,9 @@ import com.epam.izh.rd.online.helper.Direction; +import java.io.File; import java.util.*; +import java.util.stream.Collectors; import static java.util.Collections.*; @@ -23,7 +25,7 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - return 0; + return getWords(text).stream().collect(Collectors.joining()).length(); } /** @@ -34,7 +36,8 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - return 0; + + return getWords(text).size(); } /** @@ -44,7 +47,21 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - return 0; + + List array = getWords(text); + int count = 1; + + for (int i = 0; i < array.size() - 1; i++ ) { + count++; + for (int y = i + 1; y < array.size(); y++ ) { + if (array.get(i).equals(array.get(y))) { + count--; + break; + } + } + } + + return count; } /** @@ -57,7 +74,14 @@ public int countNumberOfUniqueWords(String text) { */ @Override public List getWords(String text) { - return emptyList(); + ArrayList array = new ArrayList<>(); + + StringTokenizer path_array = new StringTokenizer(text, " .,\"-!;:\r\n"); + while(path_array.hasMoreElements()) { + array.add(path_array.nextToken()); + + } + return array; } /** @@ -70,7 +94,14 @@ public List getWords(String text) { */ @Override public Set getUniqueWords(String text) { - return emptySet(); + + Set str = new HashSet<>(); + + for (String x : getWords(text)) { + str.add(x); + } + + return str; } /** @@ -82,7 +113,22 @@ public Set getUniqueWords(String text) { */ @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + + Map map = new HashMap<>(); + List array = getWords(text); + Set str = getUniqueWords(text); + + for (String x : str) { + int count = 0; + for (int i = 0; i < array.size(); i++) { + if (x.equals(array.get(i))) { + count++; + } + } + map.put(x, count); + } + + return map; } /** @@ -95,6 +141,19 @@ public Map countNumberOfWordsRepetitions(String text) { */ @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + + List array = getWords(text); + + if (direction == Direction.DESC) { + array.sort(Comparator.comparing(String :: length).thenComparing(String :: compareTo).reversed()); + return array; + } else + if (direction == Direction.ASC) { + array.sort(Comparator.comparing(String :: length).thenComparing(String :: compareTo)); + return array; + } else { throw new IllegalArgumentException();} + } + } -} + + 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..ae1ec35 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,12 +2,11 @@ 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 static java.util.Collections.*; +import static java.util.stream.Collectors.reducing; /** * Данный класс обязан использовать StreamApi из функционала Java 8. Функциональность должна быть идентична @@ -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) getWords(text).stream().collect(Collectors.toSet()).stream().count(); } @Override public List getWords(String text) { - return emptyList(); + return Arrays.stream(text.split("\\W")).filter(x -> x.length() > 0).collect(Collectors.toList()); } @Override public Set getUniqueWords(String text) { - return emptySet(); + + return getWords(text).stream().collect(Collectors.toSet()); } @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + return getWords(text).stream().collect(Collectors.groupingBy(s -> s, reducing(0, e -> 1, Integer::sum))); } @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + + if (direction == Direction.DESC) { + return getWords(text).stream().sorted(Comparator.comparing(String :: length).thenComparing(String :: compareTo).reversed()).collect(Collectors.toList()); + } else + if (direction == Direction.ASC) { + + return getWords(text).stream().sorted(Comparator.comparing(String :: length).thenComparing(String :: compareTo)).collect(Collectors.toList()); + } else { throw new IllegalArgumentException();} } -} + + + } +