From e7f1416a0f007432f340f335c41606b3d9444b6c Mon Sep 17 00:00:00 2001 From: Falmer Date: Mon, 26 Jan 2026 12:32:57 +0300 Subject: [PATCH] Add WordFrequencyImpl --- .../ru/ilug/c10_word_frequency/MainTest.java | 2 +- .../c10_word_frequency/WordFrequencyImpl.java | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/ilug/c10_word_frequency/WordFrequencyImpl.java diff --git a/src/main/java/ru/ilug/c10_word_frequency/MainTest.java b/src/main/java/ru/ilug/c10_word_frequency/MainTest.java index 4054e22..606cbb3 100644 --- a/src/main/java/ru/ilug/c10_word_frequency/MainTest.java +++ b/src/main/java/ru/ilug/c10_word_frequency/MainTest.java @@ -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 words1 = List.of("list", "map", "class", "public", "list", "set", "word", "class", "list", "public", "main", "string", "map"); List words2 = List.of("long", "string", "list", "public", "import", "double", "word", "map", "class", "package", "void", "long"); diff --git a/src/main/java/ru/ilug/c10_word_frequency/WordFrequencyImpl.java b/src/main/java/ru/ilug/c10_word_frequency/WordFrequencyImpl.java new file mode 100644 index 0000000..95a87a7 --- /dev/null +++ b/src/main/java/ru/ilug/c10_word_frequency/WordFrequencyImpl.java @@ -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 getWordFrequency(List list1, List list2) { + Set 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 + ))); + } +}