From a979ed54afe433279f20b0b97ccf7f6561e16fef Mon Sep 17 00:00:00 2001 From: lenadekart Date: Fri, 14 Mar 2025 21:32:40 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B8=D0=BC=D0=BE=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=BA=D0=BE=20=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4.=20=D0=97?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=209.1=20-=209.3.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task01/src/com/example/task01/Pair.java | 41 ++++++++++++++++++- task01/src/com/example/task01/Task01Main.java | 5 ++- task02/src/com/example/task02/SavedList.java | 39 ++++++++++++++---- task03/src/com/example/task03/Task03Main.java | 31 +++++++++++--- 4 files changed, 99 insertions(+), 17 deletions(-) diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..ad7a3d29 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,42 @@ package com.example.task01; +import java.util.Objects; +import java.util.function.BiConsumer; -public class Pair { - // TODO напишите реализацию +public class Pair { + private final T1 firstValue; + private final T2 secondValue; + + private Pair(T1 firstValue, T2 secondValue) { + this.firstValue = firstValue; + this.secondValue = secondValue; + } + + public static Pair of (T1 firstValue, T2 secondValue) { + return new Pair<>(firstValue, secondValue); + } + + public T1 getFirst() { + return firstValue; + } + + public T2 getSecond() { + return secondValue; + } + + public void ifPresent(BiConsumer biConsumer) { + if (this.firstValue != null && this.secondValue != null) biConsumer.accept(this.firstValue, this.secondValue); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || this.getClass() != o.getClass()) return false; + Pair pair = (Pair) o; + return this.firstValue.equals(pair.firstValue) && this.secondValue.equals(pair.secondValue); + } + + @Override + public int hashCode() { + return Objects.hash(this.firstValue, this.secondValue); + } } diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 54dde94f..f2ad5344 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -8,7 +8,6 @@ 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 +20,9 @@ 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); + } diff --git a/task02/src/com/example/task02/SavedList.java b/task02/src/com/example/task02/SavedList.java index 6b3a037d..444d2c32 100644 --- a/task02/src/com/example/task02/SavedList.java +++ b/task02/src/com/example/task02/SavedList.java @@ -1,35 +1,60 @@ package com.example.task02; -import java.io.File; -import java.io.Serializable; +import java.io.*; +import java.nio.file.Files; +import java.util.AbstractList; +import java.util.ArrayList; +import java.util.List; import java.util.AbstractList; public class SavedList extends AbstractList { - + private List savedList = new ArrayList<>(); + private final File file; public SavedList(File file) { + if (file.exists()){ + try (ObjectInputStream objectInputStream = new ObjectInputStream(Files.newInputStream(file.toPath()))){ + this.savedList = (List) objectInputStream.readObject(); + } catch (Exception e) { + e.printStackTrace(); + } + } + this.file = file; } + private void writeFile() { + try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(Files.newOutputStream(file.toPath()))){ + objectOutputStream.writeObject(this.savedList); + } catch (Exception e) { + e.printStackTrace(); + } + } @Override public E get(int index) { - return null; + return this.savedList.get(index); } @Override public E set(int index, E element) { - return null; + E result = this.savedList.set(index, element); + this.writeFile(); + return result; } @Override public int size() { - return 0; + return savedList.size(); } @Override public void add(int index, E element) { + savedList.add(index, element); + this.writeFile(); } @Override public E remove(int index) { - return null; + E result = this.savedList.remove(index); + this.writeFile(); + return result; } } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 7f255e98..2a210bc4 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> treeMap = new TreeMap<>(); + + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, charset))){ + List inputs = bufferedReader.lines() + .map(String::toLowerCase) + .filter(x -> x.matches("[а-я]+")) + .filter(x -> x.length() >= 3) + .collect(Collectors.toList()); + for (String input : inputs) { + char[] chars = input.toCharArray(); + Arrays.sort(chars); + String key = new String(chars); + treeMap.computeIfAbsent(key, set -> new TreeSet<>()).add(input); + } + } catch (Exception e) { + e.printStackTrace(); + } + + return treeMap.values() + .stream() + .filter(set -> set.size() >= 2) + .collect(Collectors.toList()); } }