From 52190f284e141ab33a7f3db4b3b726179fca238d Mon Sep 17 00:00:00 2001 From: Zakharov Danila Date: Fri, 29 Nov 2024 04:21:04 +0300 Subject: [PATCH 1/4] task01 --- task01/src/com/example/task01/Pair.java | 55 ++++++++++++++++++- task01/src/com/example/task01/Task01Main.java | 22 +++++++- 2 files changed, 73 insertions(+), 4 deletions(-) diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..6026c53a 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,56 @@ package com.example.task01; -public class Pair { - // TODO напишите реализацию +import java.util.Objects; +import java.util.function.BiConsumer; + +public class Pair { + private final T first; + private final U second; + + public Pair(T first, U second) { + this.first = first; + this.second = second; + } + + public static Pair of(T first, U second) { + return new Pair(first, second); + } + + // Метод ifPresent, принимает BiConsumer и выполняет его, если элементы не равны null + public void ifPresent(BiConsumer consumer) { + if (first != null && second != null) { + consumer.accept(first, second); + } + } + + public T getFirst() { + return first; + } + public U getSecond() { + return second; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Pair pair = (Pair) o; + return Objects.equals(first, pair.first) && Objects.equals(second, pair.second); + } + + // Переопределение hashCode + @Override + public int hashCode() { + return Objects.hash(first, second); + } + + // Переопределение toString для удобного отображения объекта + @Override + public String toString() { + return "Pair{" + + "first=" + first + + ", second=" + second + + '}'; + } + } diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 54dde94f..aa8a66ba 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,25 @@ 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! - */ + + System.out.println(mustBeTrue); + System.out.println(mustAlsoBeTrue); + + + + Pair pair3 = Pair.of("Hello", "World"); + System.out.println(pair3); + + // Использование ifPresent для выполнения действия, если значения не null + pair3.ifPresent((first, second) -> System.out.println(first + " " + second)); + + // с числом и строкой + Pair mixedPair = Pair.of(42, "Answer"); + System.out.println(mixedPair); + + // null + Pair nullPair = Pair.of(null, 10); + nullPair.ifPresent((first, second) -> System.out.println(first + " " + second)); // Ничего не произойдёт, так как first == null } From 62d2067cb2a328e2c77866eeae0537db5102916d Mon Sep 17 00:00:00 2001 From: Zakharov Danila Date: Fri, 29 Nov 2024 04:46:50 +0300 Subject: [PATCH 2/4] task01 --- task01/src/com/example/task01/Pair.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index 6026c53a..75df6041 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -16,7 +16,6 @@ public static Pair of(T first, U second) { return new Pair(first, second); } - // Метод ifPresent, принимает BiConsumer и выполняет его, если элементы не равны null public void ifPresent(BiConsumer consumer) { if (first != null && second != null) { consumer.accept(first, second); @@ -38,13 +37,11 @@ public boolean equals(Object o) { return Objects.equals(first, pair.first) && Objects.equals(second, pair.second); } - // Переопределение hashCode @Override public int hashCode() { return Objects.hash(first, second); } - // Переопределение toString для удобного отображения объекта @Override public String toString() { return "Pair{" + From 79b954ea690e3e4011519e0e8c84ff87ad56acfe Mon Sep 17 00:00:00 2001 From: Zakharov Danila Date: Fri, 29 Nov 2024 07:59:19 +0300 Subject: [PATCH 3/4] task02 --- task02/src/com/example/task02/SavedList.java | 49 +++++++++++++++++--- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/task02/src/com/example/task02/SavedList.java b/task02/src/com/example/task02/SavedList.java index 6b3a037d..a7fdfae2 100644 --- a/task02/src/com/example/task02/SavedList.java +++ b/task02/src/com/example/task02/SavedList.java @@ -1,35 +1,70 @@ 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; +import java.util.Map; -public class SavedList extends AbstractList { +public class SavedList extends AbstractList { + private final List list; + private final File file; public SavedList(File file) { + this.file = file; + this.list = loadFromFile(); } @Override public E get(int index) { - return null; + return list.get(index); } @Override public E set(int index, E element) { - return null; + E oldValue = list.set(index, element); + saveToFile(); + return oldValue; } @Override public int size() { - return 0; + return list.size(); } @Override public void add(int index, E element) { + list.add(index, element); + saveToFile(); } @Override public E remove(int index) { - return null; + E removedElement = list.remove(index); + saveToFile(); + return removedElement; + } + + private void saveToFile() { + try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))) { + oos.writeObject(list); + } catch (IOException e) { + e.printStackTrace(); + } + } + + // Метод для загрузки списка из файла + @SuppressWarnings("unchecked") + private List loadFromFile() { + if (!file.exists()) { + return new ArrayList<>(); + } + + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) { + return (List) ois.readObject(); + } catch (IOException | ClassNotFoundException e) { + e.printStackTrace(); + return new ArrayList<>(); + } } } From bee90b556fe8640144bc92f5486814525393f3e2 Mon Sep 17 00:00:00 2001 From: Zakharov Danila Date: Fri, 29 Nov 2024 07:59:28 +0300 Subject: [PATCH 4/4] task03 --- task03/src/com/example/task03/Task03Main.java | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 7f255e98..58c2050c 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,24 @@ public static void main(String[] args) throws IOException { } public static List> findAnagrams(InputStream inputStream, Charset charset) { - return null; + Map> result = new TreeMap<>(); + + try (BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, charset))) { + List entries = br.lines() + .map(String::toLowerCase) + .filter(x -> x.matches("[а-яё]+") && x.length() >= 3) + .collect(Collectors.toList()); + for (String s : entries) { + char[] symbols = s.toCharArray(); + Arrays.sort(symbols); + String key = new String(symbols); + result.computeIfAbsent(key, a -> new TreeSet<>()).add(s); + } + } catch (IOException ignored) { } + + return result.values() + .stream() + .filter(x -> x.size() >= 2) + .collect(Collectors.toList()); } }