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/Main.java b/src/main/java/com/epam/izh/rd/online/Main.java index 3f661d6..59817b2 100644 --- a/src/main/java/com/epam/izh/rd/online/Main.java +++ b/src/main/java/com/epam/izh/rd/online/Main.java @@ -6,6 +6,5 @@ public class Main { public static void main(String[] args) throws IOException, URISyntaxException { - } } 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..27deb3d 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 @@ -1,11 +1,8 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.helper.Direction; - import java.util.*; -import static java.util.Collections.*; - /** * Совет: * Начните с реализации метода {@link SimpleTextStatisticsAnalyzer#getWords(String)}. @@ -23,7 +20,12 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - return 0; + String[] splitWords = text.split("\\s*\\W\\s*"); + int count = 0; + for (String tempWord : splitWords) { + count += tempWord.length(); + } + return count; } /** @@ -34,7 +36,7 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - return 0; + return getWords(text).size(); } /** @@ -44,20 +46,28 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - return 0; + return new HashSet<>(getWords(text)).size(); } /** - * Необходимо реализовать функционал получения списка слов из текста. - * Пробелы, запятые, точки, кавычки и другие знаки препинания являются разделителями слов. + * Необходимо реализовать функционал получения списка слов из текста.. + * Пробелы, запятые, точки, кавычки и другие знаки препинания являются разделителями слов............3 * Например для текста "One, two, three, three - one, tWo, tWo!!" должен вернуться список : * {"One", "two", "three", "three", "one", "tWo", "tWo"} - * + *........................... * @param text текст */ @Override public List getWords(String text) { - return emptyList(); + String[] splitWords = text.split("\\s*\\W\\s*"); + + List wordsList = new ArrayList<>(); + for (String splitWord : splitWords) { + if (!splitWord.equals("")) { + wordsList.add(splitWord); + } + } + return wordsList; } /** @@ -70,7 +80,7 @@ public List getWords(String text) { */ @Override public Set getUniqueWords(String text) { - return emptySet(); + return new HashSet<>(getWords(text)); } /** @@ -82,7 +92,20 @@ public Set getUniqueWords(String text) { */ @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + return getMapWithNumberOfWordsRepetitions(getWords(text)); + } + + private Map getMapWithNumberOfWordsRepetitions(List splitWords) { + Map map = new HashMap<>(); + for (String splitWord : splitWords) { + if (map.containsKey(splitWord)) { + int count = map.get(splitWord); + map.put(splitWord, ++count); + } else { + map.put(splitWord, 1); + } + } + return map; } /** @@ -95,6 +118,15 @@ public Map countNumberOfWordsRepetitions(String text) { */ @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + return getListWithSortAsDirection(getWords(text), direction); + } + + private List getListWithSortAsDirection(List wordsList, Direction direction) { + if (direction.name().equals("ASC")) { + wordsList.sort(Comparator.comparing(String::length)); + } else { + wordsList.sort(Comparator.comparing(String::length).reversed()); + } + return wordsList; } } 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..39ea7fe 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 @@ -1,13 +1,8 @@ package com.epam.izh.rd.online.service; 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 static java.util.Collections.*; +import java.util.*; +import java.util.stream.Collectors; /** * Данный класс обязан использовать StreamApi из функционала Java 8. Функциональность должна быть идентична @@ -16,36 +11,38 @@ public class StreamApiTextStatisticsAnalyzer implements TextStatisticsAnalyzer { @Override public int countSumLengthOfWords(String text) { - return 0; + return Arrays.stream(text.split("\\s*\\W\\s*")).filter(x -> !x.equals("")).mapToInt(String::length).sum(); } @Override public int countNumberOfWords(String text) { - return 0; + return (int) Arrays.stream(text.split("\\s*\\W\\s*")).filter(x -> !x.equals("")).count(); } @Override public int countNumberOfUniqueWords(String text) { - return 0; + return (int) Arrays.stream(text.split("\\s*\\W\\s*")).filter(x -> !x.equals("")).distinct().count(); } @Override public List getWords(String text) { - return emptyList(); + return Arrays.stream(text.split("\\s*\\W\\s*")).filter(x -> !x.equals("")).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.toMap(key -> key, value -> 1, Integer::sum)); } @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + return direction.name().contains("ASC") ? + getWords(text).stream().sorted(Comparator.comparing(String::length)).collect(Collectors.toList()) : + getWords(text).stream().sorted(Comparator.comparing(String::length).reversed()).collect(Collectors.toList()); } }