From 7855d260013653b8da002b4889dd9c5d6760a49b Mon Sep 17 00:00:00 2001 From: Serdyukov Alexander <30432511+SerdyukovAlexander@users.noreply.github.com> Date: Tue, 17 Dec 2024 23:30:46 +0500 Subject: [PATCH 1/4] =?UTF-8?q?1=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task01/src/com/example/task01/Pair.java | 62 ++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..f9c9306a 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,63 @@ package com.example.task01; -public class Pair { - // TODO напишите реализацию +import java.util.Objects; +import java.util.function.BiConsumer; + +public class Pair +{ + private final A first; + private final B second; + + private Pair(A first, B last) + { + this.first = first; + this.second = last; + } + + public static Pair of(A first, B second) + { + return new Pair<>(first, second); + } + + public A getFirst() + { + return first; + } + + public B getSecond() + { + return second; + } + + public void ifPresent(BiConsumer action) + { + if (first != null && second != null) + { + action.accept(first, second); + } + } + + @Override + 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); + } + + @Override + public int hashCode() + { + return Objects.hash(first, second); + } } From dc9aa7096212492d47364fd62d6a80b465ae41dc Mon Sep 17 00:00:00 2001 From: Serdyukov Alexander <30432511+SerdyukovAlexander@users.noreply.github.com> Date: Tue, 17 Dec 2024 23:30:52 +0500 Subject: [PATCH 2/4] =?UTF-8?q?1=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task01/src/com/example/task01/Task01Main.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 54dde94f..c6e786e2 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -4,11 +4,8 @@ import java.io.InputStream; public class Task01Main { - public static void main(String[] args) throws IOException { - - // TODO С корректно реализованным классом Pair должен компилироваться и успешно работать следующий код: - - /* + public static void main(String[] args) throws IOException + { Pair pair = Pair.of(1, "hello"); Integer i = pair.getFirst(); // 1 String s = pair.getSecond(); // "hello" @@ -21,8 +18,6 @@ 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! - */ - } } From efa52ff5673baa4252f2e52a423bb98f22edc159 Mon Sep 17 00:00:00 2001 From: Serdyukov Alexander <30432511+SerdyukovAlexander@users.noreply.github.com> Date: Tue, 17 Dec 2024 23:31:03 +0500 Subject: [PATCH 3/4] =?UTF-8?q?2=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task02/src/com/example/task02/SavedList.java | 77 ++++++++++++++++---- 1 file changed, 64 insertions(+), 13 deletions(-) diff --git a/task02/src/com/example/task02/SavedList.java b/task02/src/com/example/task02/SavedList.java index 6b3a037d..23b4105d 100644 --- a/task02/src/com/example/task02/SavedList.java +++ b/task02/src/com/example/task02/SavedList.java @@ -1,35 +1,86 @@ 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; -public class SavedList extends AbstractList { +public class SavedList extends AbstractList +{ + private final ArrayList list = new ArrayList<>(); + private final File file; - public SavedList(File file) { + public SavedList(File file) + { + this.file = file; + loadFromFile(); + } + + private void loadFromFile() + { + if (!file.exists()) + { + return; + } + + try (ObjectInputStream stream = new ObjectInputStream(Files.newInputStream(file.toPath()))) + { + @SuppressWarnings("unchecked") // <- Чтобы глаза не мазолило + ArrayList loadedList = (ArrayList) stream.readObject(); + list.addAll(loadedList); + } + + catch (IOException | ClassNotFoundException e) + { + throw new RuntimeException("Error when loading data from file", e); + } + } + + private void saveToFile() + { + try (ObjectOutputStream stream = new ObjectOutputStream(Files.newOutputStream(file.toPath()))) + { + stream.writeObject(list); + } + + catch (IOException e) + { + throw new RuntimeException("Error when saving data to file", e); + } } @Override - public E get(int index) { - return null; + public E get(int index) + { + return list.get(index); } @Override - public E set(int index, E element) { - return null; + public E set(int index, E element) + { + E oldElement = list.set(index, element); + saveToFile(); + return oldElement; } @Override - public int size() { - return 0; + public int size() + { + return list.size(); } @Override - public void add(int index, E element) { + public void add(int index, E element) + { + list.add(index, element); + saveToFile(); } @Override - public E remove(int index) { - return null; + public E remove(int index) + { + E removedElement = list.remove(index); + saveToFile(); + return removedElement; } } From bb7f31f126440cf37dbb508299b0ded87d6d847f Mon Sep 17 00:00:00 2001 From: Serdyukov Alexander <30432511+SerdyukovAlexander@users.noreply.github.com> Date: Tue, 17 Dec 2024 23:31:09 +0500 Subject: [PATCH 4/4] =?UTF-8?q?3=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task03/src/com/example/task03/Task03Main.java | 47 ++++++++++++++----- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 7f255e98..5427405e 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,24 +1,49 @@ 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 { - - public static void main(String[] args) throws IOException { +public class Task03Main +{ + public static void main(String[] args) throws IOException + { List> anagrams = findAnagrams(new FileInputStream("task03/resources/singular.txt"), Charset.forName("windows-1251")); - for (Set anagram : anagrams) { + for (Set anagram : anagrams) + { System.out.println(anagram); } } - public static List> findAnagrams(InputStream inputStream, Charset charset) { - return null; + public static List> findAnagrams(InputStream inputStream, Charset charset) + { + Map> result = new TreeMap<>(); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset))) + { + reader.lines().map(String::toLowerCase) + .filter(word -> word.matches("[а-яё]+") && word.length() >= 3) + + .forEach(word -> + { + String sortedChars = word.chars().sorted() + .mapToObj(c -> String.valueOf((char) c)) + .collect(Collectors.joining()); + + result.computeIfAbsent(sortedChars, key -> new TreeSet<>()).add(word); + }); + } + + catch (IOException e) + { + throw new RuntimeException("Somethings wrong", e); + } + + return result.values().stream() + .filter(group -> group.size() >= 2) + .collect(Collectors.toList()); } }