From 1232f0fa90e6f330aa27166da728f3ecd3434beb Mon Sep 17 00:00:00 2001 From: jasperin Date: Fri, 29 Nov 2024 09:13:14 +0500 Subject: [PATCH] add --- task01/src/com/example/task01/Pair.java | 46 ++++++++++++++++-- task02/list1.dat | Bin 0 -> 72 bytes task02/list1a.dat | Bin 0 -> 78 bytes task02/list2.dat | Bin 0 -> 1162 bytes task02/list4.dat | Bin 0 -> 155 bytes task02/src/com/example/task02/SavedList.java | 38 ++++++++++++--- task03/src/com/example/task03/Task03Main.java | 31 +++++++++--- 7 files changed, 97 insertions(+), 18 deletions(-) create mode 100644 task02/list1.dat create mode 100644 task02/list1a.dat create mode 100644 task02/list2.dat create mode 100644 task02/list4.dat diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..d27657b3 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; -public class Pair { - // TODO напишите реализацию -} +import java.util.Objects; +import java.util.function.BiConsumer; + +public class Pair { + private final F FirstValue; + private final S SecondValue; + + private Pair(F firstValue, S secondValue) { + FirstValue = firstValue; + SecondValue = secondValue; + } + + public static Pair of(F firstValue, S secondValue) { + return new Pair<>(firstValue, secondValue); + } + + public F getFirst() { + return FirstValue; + } + + public S getSecond() { + return SecondValue; + } + + public void ifPresent(BiConsumer biConsumer) { + if (FirstValue != null && SecondValue != null) biConsumer.accept(FirstValue, SecondValue); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || this.getClass() != obj.getClass()) return false; + + Pair pair = (Pair) obj; + + return Objects.equals(FirstValue, pair.FirstValue) && Objects.equals(SecondValue, pair.SecondValue); + } + + @Override + public int hashCode() { + return Objects.hash(FirstValue, SecondValue); + } +} \ No newline at end of file diff --git a/task02/list1.dat b/task02/list1.dat new file mode 100644 index 0000000000000000000000000000000000000000..e09632d32de0890ed6bfc295d1ff21b297459f13 GIT binary patch literal 72 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG Z7?{dgKx7F6vwvP{2?J|LMp0^N1ps)r7AXJ# literal 0 HcmV?d00001 diff --git a/task02/list1a.dat b/task02/list1a.dat new file mode 100644 index 0000000000000000000000000000000000000000..e23b42f9a735d90d23859e7eda7a1fa0bfaa7dc6 GIT binary patch literal 78 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG e7?{ghKx7F6vwvPHkPIo$FJWK}$tX%qtpET3&KKMO literal 0 HcmV?d00001 diff --git a/task02/list2.dat b/task02/list2.dat new file mode 100644 index 0000000000000000000000000000000000000000..5f09bec6154ced2ca7c099b43ff047d57d70a008 GIT binary patch literal 1162 zcmYMzJxT;Y5QgEF-9>Zb1y8V8)j!o6nkfh-USNU|XBkvxW_2|47zW`=M>;Kc7@SS^xk5 literal 0 HcmV?d00001 diff --git a/task02/list4.dat b/task02/list4.dat new file mode 100644 index 0000000000000000000000000000000000000000..76e4dedeefb88bd4d9b05d5d6f99998683a3b4d4 GIT binary patch literal 155 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG z7?{ghKqOF;AXrmQVqUtQXI@EadTNo-qXkR8H?~_afwZueCFYc-RunM^Ak_Jl<|d^U hwXK;d%RS{mHxmN`$Vler#f1!Y3_u 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 = (ArrayList) is.readObject(); + } catch (Exception ignored) { } + } else { + list = new ArrayList<>(); + } } @Override public E get(int index) { - return null; + return list.get(index); } @Override public E set(int index, E element) { - return null; + E el = list.set(index, element); + writeFile(); + return el; } @Override public int size() { - return 0; + return list.size(); } @Override public void add(int index, E element) { + list.add(index, element); + writeFile(); } @Override public E remove(int index) { - return null; + E el = list.remove(index); + writeFile(); + return el; } -} + + private void writeFile() { + try (ObjectOutputStream obj = new ObjectOutputStream(new FileOutputStream(file))) { + obj.writeObject(list); + } catch (IOException ignored) { + } + } +} \ No newline at end of file diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 7f255e98..4ef4dad5 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,16 +1,13 @@ 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 { - List> anagrams = findAnagrams(new FileInputStream("task03/resources/singular.txt"), Charset.forName("windows-1251")); for (Set anagram : anagrams) { System.out.println(anagram); @@ -19,6 +16,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()); } -} +} \ No newline at end of file