Compare commits
5 Commits
master
...
realizatio
| Author | SHA1 | Date | |
|---|---|---|---|
| e7f1416a0f | |||
| 862ec9fd78 | |||
| 14fe940c6b | |||
| 6e321081ca | |||
| c1669b7814 |
@@ -9,7 +9,7 @@ import java.util.Map;
|
||||
public class MainTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
WordFrequency wordFrequency = null;
|
||||
WordFrequency wordFrequency = new WordFrequencyImpl();
|
||||
|
||||
List<String> words1 = List.of("list", "map", "class", "public", "list", "set", "word", "class", "list", "public", "main", "string", "map");
|
||||
List<String> words2 = List.of("long", "string", "list", "public", "import", "double", "word", "map", "class", "package", "void", "long");
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package ru.ilug.c10_word_frequency;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Slf4j
|
||||
public class WordFrequencyImpl implements WordFrequency {
|
||||
|
||||
/**
|
||||
* Ищет слова, которые встречаются в обоих списках, считает суммарную частоту каждого
|
||||
* @param list1 Первый список слов
|
||||
* @param list2 Второй список слов
|
||||
* @return Частота слов, которые есть в обоих списках
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Integer> getWordFrequency(List<String> list1, List<String> list2) {
|
||||
Set<String> retainedSet = new HashSet<>(list1);
|
||||
retainedSet.retainAll(list2);
|
||||
|
||||
return Stream.concat(list1.stream(), list2.stream())
|
||||
.filter(retainedSet::contains)
|
||||
.collect(Collectors.groupingBy(w -> w, Collectors.collectingAndThen(
|
||||
Collectors.toList(),
|
||||
List::size
|
||||
)));
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,6 @@ public class WordGroupImpl implements WordGroup {
|
||||
public Map<Integer, List<String>> groupWordsByLength(String text) {
|
||||
text = text.replaceAll("[.,]", "");
|
||||
return Arrays.stream(text.split(" "))
|
||||
.map(String::toLowerCase)
|
||||
.collect(Collectors.groupingBy(String::length));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package ru.ilug.c7_factorial_calculator;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public class FactorialCalculatorImpl implements FactorialCalculator {
|
||||
|
||||
private final Map<Integer, Integer> cache = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public int calculate(int num) {
|
||||
if (num <= 1) {
|
||||
return 1;
|
||||
}
|
||||
return cache.computeIfAbsent(num, n -> calculate(n - 1) * n);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
public class MainTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
FactorialCalculator factorialCalculator = null;
|
||||
FactorialCalculator factorialCalculator = new FactorialCalculatorImpl();
|
||||
|
||||
log.info("Factorial 3 = {}", factorialCalculator.calculate(3));
|
||||
log.info("Factorial 4 = {}", factorialCalculator.calculate(4));
|
||||
|
||||
34
src/main/java/ru/ilug/c8_anagram_group/AnagramGroupImpl.java
Normal file
34
src/main/java/ru/ilug/c8_anagram_group/AnagramGroupImpl.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package ru.ilug.c8_anagram_group;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.nio.CharBuffer;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
public class AnagramGroupImpl implements AnagramGroup {
|
||||
|
||||
/**
|
||||
* Группирует слова в группы анаграммы (слова, составленные из одних букв). Ключ — отсортированные буквы слова, значение — список анаграмм.
|
||||
*
|
||||
* @param words Слова
|
||||
* @return Группы
|
||||
*/
|
||||
@Override
|
||||
public Map<String, List<String>> group(String... words) {
|
||||
Map<String, List<String>> anagrams = new HashMap<>();
|
||||
|
||||
for (String word : words) {
|
||||
String key = CharBuffer.wrap(word.toCharArray()).chars().boxed()
|
||||
.distinct()
|
||||
.sorted()
|
||||
.map(c -> String.valueOf((char) c.intValue()))
|
||||
.collect(Collectors.joining());
|
||||
anagrams.computeIfAbsent(key, k -> new LinkedList<>()).add(word);
|
||||
}
|
||||
|
||||
return anagrams;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,17 +2,21 @@ package ru.ilug.c8_anagram_group;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
public class MainTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
AnagramGroup anagramGroup = null;
|
||||
AnagramGroup anagramGroup = new AnagramGroupImpl();
|
||||
|
||||
String[] words = new String[]{
|
||||
"кабан", "соринка", "кукла", "мышка", "приказ", "шнурок",
|
||||
"кулак", "банка", "коршун", "росинка", "каприз", "камыш"
|
||||
"кабан", "соринка", "кукла", "мышка", "приказ", "шнурок", // кабан -> кабн -> абкн
|
||||
"кулак", "банка", "коршун", "росинка", "каприз", "камыш" // банка -> банк -> абкн
|
||||
};
|
||||
log.info("Anagram groups: {}", words);
|
||||
Map<String, List<String>> result = anagramGroup.group(words);
|
||||
log.info("Anagram groups: {}", result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import java.util.Map;
|
||||
public class MainTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
MostFrequentWords mostFrequentWords = null;
|
||||
MostFrequentWords mostFrequentWords = new MostFrequentWordsImpl();
|
||||
|
||||
Map<String, Integer> result = mostFrequentWords.getNWords("На дворе трава, на траве дрова. Не руби дрова на траве двора!", 3);
|
||||
log.info("3 most frequent words: {}", result);
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package ru.ilug.c9_most_frequent_words;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class MostFrequentWordsImpl implements MostFrequentWords {
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Map<String, Integer> getNWords(String text, int count) {
|
||||
return Arrays.stream(text.replaceAll("[.,!]", "").split(" "))
|
||||
.collect(
|
||||
Collectors.groupingBy(c -> c,
|
||||
Collectors.collectingAndThen(Collectors.toList(), List::size)
|
||||
)
|
||||
).entrySet().stream()
|
||||
.sorted(Comparator.comparingInt(e -> ((Map.Entry<String, Integer>)e).getValue()).reversed())
|
||||
.limit(count)
|
||||
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user