From 1787ed85ea798d490dfd006bad0df21734686adc Mon Sep 17 00:00:00 2001 From: LilChooch Date: Fri, 6 Dec 2024 02:51:10 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BC=D0=BE=D0=BB=D0=B8=D0=BD=20=D0=9E?= =?UTF-8?q?=D0=BB=D0=B5=D0=B3=20=D0=9F=D1=80=D0=B8-202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task01/src/com/example/task01/Pair.java | 42 +++++++++++++++- task01/src/com/example/task01/Task01Main.java | 4 +- task02/src/com/example/task02/SavedList.java | 48 +++++++++++++++++-- task03/src/com/example/task03/Task03Main.java | 25 +++++++++- 4 files changed, 109 insertions(+), 10 deletions(-) diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..d2030cd0 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,45 @@ package com.example.task01; +import java.util.Objects; +import java.util.function.BiConsumer; -public class Pair { +public class Pair { // TODO напишите реализацию + 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 void ifPresent(BiConsumer consumer) { + if (first != null && second != null) { + consumer.accept(first, second); + } + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof Pair)) return false; + Pair pair = (Pair) obj; + return Objects.equals(first, pair.first) && Objects.equals(second, pair.second); + } + + @Override + public int hashCode() { + return Objects.hash(first, second); + } } diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 54dde94f..e4d36b53 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -8,7 +8,7 @@ public static void main(String[] args) throws IOException { // TODO С корректно реализованным классом Pair должен компилироваться и успешно работать следующий код: - /* + Pair pair = Pair.of(1, "hello"); Integer i = pair.getFirst(); // 1 String s = pair.getSecond(); // "hello" @@ -21,7 +21,7 @@ public static void main(String[] args) throws IOException { Pair pair2 = Pair.of(1, "hello"); boolean mustBeTrue = pair.equals(pair2); // true! boolean mustAlsoBeTrue = pair.hashCode() == pair2.hashCode(); // true! - */ + } diff --git a/task02/src/com/example/task02/SavedList.java b/task02/src/com/example/task02/SavedList.java index 6b3a037d..3f300e89 100644 --- a/task02/src/com/example/task02/SavedList.java +++ b/task02/src/com/example/task02/SavedList.java @@ -3,33 +3,71 @@ import java.io.File; import java.io.Serializable; import java.util.AbstractList; - +import java.io.*;import java.util.ArrayList; +import java.util.List; public class SavedList extends AbstractList { + private final File file; + private List elements; public SavedList(File file) { + this.file = file; + this.elements = new ArrayList<>(); + loadFromFile(); + } + private void loadFromFile() { + if (file.exists()) { + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) { + elements = (List) ois.readObject(); + } + catch (IOException | ClassNotFoundException e) { + e.printStackTrace(); + elements = new ArrayList<>(); + } + } else { + elements = new ArrayList<>(); + } + } + + private void saveToFile() { + try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))) { + oos.writeObject(elements); + } + catch (IOException e) { + e.printStackTrace(); + } } @Override public E get(int index) { - return null; + return elements.get(index); } @Override public E set(int index, E element) { - return null; + E oldElement = elements.set(index, element); + saveToFile(); + return oldElement; } @Override public int size() { - return 0; + return elements.size(); } @Override public void add(int index, E element) { + elements.add(index, element); + saveToFile(); } @Override public E remove(int index) { - return null; + E removedElement = elements.remove(index); + saveToFile(); + return removedElement; + } + @Override + public String toString() { + return elements.toString(); } } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 7f255e98..e0d27175 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -6,7 +6,8 @@ import java.nio.charset.Charset; import java.util.List; import java.util.Set; - +import java.util.*; +import java.util.stream.Collectors;import java.io.*; public class Task03Main { public static void main(String[] args) throws IOException { @@ -19,6 +20,26 @@ public static void main(String[] args) throws IOException { } public static List> findAnagrams(InputStream inputStream, Charset charset) { - return null; + + Map> anagrams = new TreeMap<>(); + + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, charset))) { + bufferedReader.lines() + .map(String::toLowerCase) // приводим к нижнему регистру + .filter(x -> x.length() >= 3 && x.matches("[а-я]+")) // фильтруем по длине и регулярному выражению + .forEach(x -> { + char[] chars = x.toCharArray(); + Arrays.sort(chars); // сортируем символы + String word = new String(chars); + anagrams.computeIfAbsent(word, y -> new TreeSet<>()).add(x); // добавляем в карту + }); + } + catch (IOException e) { + e.printStackTrace(); + } + + return anagrams.values().stream() + .filter(x -> x.size() >= 2) // оставляем только группы анаграмм + .collect(Collectors.toList()); } }