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..18fbca7 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
@@ -3,8 +3,9 @@
import com.epam.izh.rd.online.helper.Direction;
import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
-import static java.util.Collections.*;
/**
* Совет:
@@ -23,7 +24,12 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer {
*/
@Override
public int countSumLengthOfWords(String text) {
- return 0;
+ List words = getWords(text);
+ int countOfWords = 0;
+ for (String word : words) {
+ countOfWords += word.length();
+ }
+ return countOfWords;
}
/**
@@ -34,7 +40,8 @@ public int countSumLengthOfWords(String text) {
*/
@Override
public int countNumberOfWords(String text) {
- return 0;
+ List words = getWords(text);
+ return words.size();
}
/**
@@ -44,7 +51,16 @@ public int countNumberOfWords(String text) {
*/
@Override
public int countNumberOfUniqueWords(String text) {
- return 0;
+ List words = getWords(text);
+ List repeatedWords = new ArrayList<>();
+ int counterOfUniqueWords = 0;
+ for (String word : words) {
+ if (!repeatedWords.contains(word)) {
+ repeatedWords.add(word);
+ counterOfUniqueWords++;
+ }
+ }
+ return counterOfUniqueWords;
}
/**
@@ -57,7 +73,11 @@ public int countNumberOfUniqueWords(String text) {
*/
@Override
public List getWords(String text) {
- return emptyList();
+ Pattern pattern = Pattern.compile("[\\W+]");
+ Matcher matcher = pattern.matcher(text);
+ String textIntermediateVersion = matcher.replaceAll("1");
+
+ return Arrays.asList(textIntermediateVersion.split("1+"));
}
/**
@@ -70,7 +90,9 @@ public List getWords(String text) {
*/
@Override
public Set getUniqueWords(String text) {
- return emptySet();
+ List words = getWords(text);
+ return new HashSet<>(words);
+
}
/**
@@ -82,9 +104,29 @@ public Set getUniqueWords(String text) {
*/
@Override
public Map countNumberOfWordsRepetitions(String text) {
- return emptyMap();
+ List words = getWords(text);
+ List repeatedWords = new ArrayList<>();
+ Map countedWords = new HashMap<>();
+ for (String word : words) {
+ if (!repeatedWords.contains(word)) {
+ countedWords.put(word, countRepeats(word, words));
+ repeatedWords.add(word);
+ }
+ }
+ return countedWords;
+
+ }
+
+ private int countRepeats(String word, List list) {
+ int counter = 0;
+ for (String wordInList : list) {
+ counter += wordInList.equals(word) ? 1 : 0;
+ }
+ return counter;
+
}
+
/**
* Необходимо реализовать функционал вывода слов из текста в отсортированном виде (по длине) в зависимости от параметра direction.
* Например для текста "Hello, Hi, mother, father - good, cat, c!!" должны вернуться результаты :
@@ -95,6 +137,11 @@ public Map countNumberOfWordsRepetitions(String text) {
*/
@Override
public List sortWordsByLength(String text, Direction direction) {
- return emptyList();
+ List words = getWords(text);
+ Comparator comparator = Comparator.comparing(String::length);
+ comparator = direction == Direction.ASC ? comparator : comparator.reversed();
+ words.sort(comparator);
+
+ return words;
}
}
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..b979f14 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,10 @@
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.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
* Данный класс обязан использовать StreamApi из функционала Java 8. Функциональность должна быть идентична
@@ -16,36 +14,62 @@
public class StreamApiTextStatisticsAnalyzer implements TextStatisticsAnalyzer {
@Override
public int countSumLengthOfWords(String text) {
- return 0;
+ List words = getWords(text);
+ return words.stream().reduce(0, (sum, s) -> sum += s.length(), Integer::sum);
}
+
@Override
public int countNumberOfWords(String text) {
- return 0;
+ List words = getWords(text);
+ return words.stream().reduce(0, (sum, s) -> sum += 1, Integer::sum);
+
}
@Override
public int countNumberOfUniqueWords(String text) {
- return 0;
+ List words = getWords(text);
+ List repeatedWords = new ArrayList<>();
+ return (int) words.stream().filter((o1) -> !repeatedWords.contains(o1)).map(repeatedWords::add).count();
}
@Override
public List getWords(String text) {
- return emptyList();
+ Pattern pattern = Pattern.compile("[\\W+]");
+ Matcher matcher = pattern.matcher(text);
+
+ String textVer2 = matcher.replaceAll("1");
+ String[] wordsArray = textVer2.split("1+");
+ return Arrays.stream(wordsArray).collect(Collectors.toList());
+
+
}
@Override
public Set getUniqueWords(String text) {
- return emptySet();
+ List words = getWords(text);
+ return words.stream().collect(Collectors.toSet());
}
@Override
public Map countNumberOfWordsRepetitions(String text) {
- return emptyMap();
+ List words = getWords(text);
+ Set wordSet = new HashSet<>(words);
+ Map countedWords = new HashMap<>();
+ wordSet.stream().forEach((s) -> countedWords.put(s, countRepeats(s, words)));
+ return countedWords;
+ }
+
+ private int countRepeats(String word, List list) {
+ return (int) list.stream().filter(s -> s.equals(word)).count();
}
@Override
public List sortWordsByLength(String text, Direction direction) {
- return emptyList();
+ List words = getWords(text);
+ Comparator comparator = Comparator.comparing(String::length);
+ comparator = direction == Direction.ASC ? comparator : comparator.reversed();
+ return words.stream().sorted(comparator).collect(Collectors.toList());
+
}
}