From c69a7f20337e65c0f23687a4cef6fc5a6fb97040 Mon Sep 17 00:00:00 2001 From: Artem Solovyov Date: Mon, 24 Feb 2025 14:25:13 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=BB=D0=BE=D0=B2=D1=8C=D0=B5?= =?UTF-8?q?=D0=B2=20=D0=90=D1=80=D1=82=D1=91=D0=BC.=20=D0=97=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=201-3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task01/src/com/example/task01/Pair.java | 45 ++++++++++++++++++- task02/src/com/example/task02/SavedList.java | 38 +++++++++++++--- task03/src/com/example/task03/Task03Main.java | 31 ++++++++++--- 3 files changed, 100 insertions(+), 14 deletions(-) diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..7f124019 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,46 @@ package com.example.task01; -public class Pair { - // TODO напишите реализацию +import java.lang.reflect.Parameter; +import java.util.Objects; +import java.util.Optional; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public class Pair { + private final F first; + private final S second; + + private Pair(F first, S second) { + this.first = first; + this.second = second; + } + + public static Pair of(F first, S second) { + return new Pair<>(first, second); + } + + public F getFirst() { + return first; + } + + public S getSecond() { + return second; + } + + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + + Pair pair = (Pair) obj; + + return Objects.equals(first, pair.first) && Objects.equals(second, pair.second); + } + + public int hashCode() { + return Objects.hash(first, second); + } + + public void ifPresent(BiConsumer biConsumer) { + if (first != null && second != null) biConsumer.accept(first, second); + } } diff --git a/task02/src/com/example/task02/SavedList.java b/task02/src/com/example/task02/SavedList.java index 6b3a037d..b2978585 100644 --- a/task02/src/com/example/task02/SavedList.java +++ b/task02/src/com/example/task02/SavedList.java @@ -1,35 +1,61 @@ package com.example.task02; -import java.io.File; -import java.io.Serializable; +import java.io.*; import java.util.AbstractList; +import java.util.ArrayList; +import java.util.List; public class SavedList extends AbstractList { + private final File file; + private List list; + public SavedList(File file) { + this.file = file; + if (file.exists()) { + try (ObjectInputStream is = new ObjectInputStream(new FileInputStream(file))) { + list = (List) is.readObject(); + } catch (Exception e) { + } + } else { + list = new ArrayList<>(); + } + } + + private void writeFile() { + try (ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream(file))) { + obj.writeObject(list); + } catch (IOException e) { + } } @Override public E get(int index) { - return null; + return list.get(index); } @Override public E set(int index, E element) { - return null; + E old = list.set(index, element); + this.writeFile(); + return old; } @Override public int size() { - return 0; + return list.size(); } @Override public void add(int index, E element) { + list.add(index, element); + this.writeFile(); } @Override public E remove(int index) { - return null; + E old = list.remove(index); + this.writeFile(); + return old; } } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 7f255e98..d39ba45c 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,11 +1,9 @@ package com.example.task03; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.nio.charset.Charset; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; public class Task03Main { @@ -19,6 +17,27 @@ public static void main(String[] args) throws IOException { } public static List> findAnagrams(InputStream inputStream, Charset charset) { - return null; + Map> anagrams = new TreeMap<>(); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset))) { + for (String line; (line = reader.readLine()) != null; ) { + String[] words = line.toLowerCase().split("\\s"); + + for (String word : words) { + if (word.length() >= 3 && word.matches("[а-я]+")) { + char[] chars = word.toCharArray(); + Arrays.sort(chars); + String sortedWord = new String(chars); + + anagrams.computeIfAbsent(sortedWord, k -> new TreeSet<>()).add(word); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + } + + return anagrams.values().stream().filter(group -> group.size() >= 2) + .collect(Collectors.toList()); } }