From ecf9dc82e236a048ca3ffd3e31927edc988bec35 Mon Sep 17 00:00:00 2001 From: gippster Date: Fri, 29 Nov 2024 04:12:56 +0500 Subject: [PATCH] 1 --- task01/src/com/example/task01/Pair.java | 51 +++++++++++- task01/src/com/example/task01/Task01Main.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 | 66 ++++++++++++--- task03/src/com/example/task03/Task03Main.java | 76 ++++++++++++++++-- testlist.dat | Bin 0 -> 66 bytes 9 files changed, 200 insertions(+), 39 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 create mode 100644 testlist.dat diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..ae6ab1b1 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,52 @@ package com.example.task01; -public class Pair { - // TODO напишите реализацию +import java.util.Objects; +import java.util.function.BiConsumer; + +public class Pair { + + private final T1 _first; + private final T2 _second; + + private Pair(T1 first, T2 second) { + this._first = first; + this._second = second; + } + + public static Pair of(T1 first, T2 second) { + return new Pair<>(first, second); + } + + public T1 getFirst() { + return _first; + } + + public T2 getSecond() { + return _second; + } + + public void ifPresent(BiConsumer consumer) { + if (_first != null || _second != null) { // Изменено условие + consumer.accept(_first, _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); + } + + @Override + public int hashCode() { + return Objects.hash(_first, _second); + } + + @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..207fd8d0 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -6,22 +6,36 @@ public class Task01Main { 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" - - pair.ifPresent((first, second) -> { - System.out.println(first); - System.out.println(second); - }); - - Pair pair2 = Pair.of(1, "hello"); - boolean mustBeTrue = pair.equals(pair2); // true! - boolean mustAlsoBeTrue = pair.hashCode() == pair2.hashCode(); // true! - */ + // Создаем пару с двумя значениями + Pair pair = Pair.of("Hello", 42); + + // Получаем элементы пары + System.out.println("1: " + pair.getFirst()); // Вывод: Hello + System.out.println("2: " + pair.getSecond()); // Вывод: 42 + + // Проверяем работу ifPresent + pair.ifPresent((first, second) -> + System.out.println("1: " + first + " 2 " + second) + ); + + // Создаем пару с одним значением null + Pair halfEmptyPair = Pair.of("Hello", null); + halfEmptyPair.ifPresent((first, second) -> + System.out.println("223") + ); + + // Сравниваем пары + Pair pair2 = Pair.of("Hello", 42); + System.out.println(pair.equals(pair2)); + + // Проверяем работу с null + Pair emptyPair = Pair.of(null, null); + System.out.println(emptyPair.getFirst() + ", " + emptyPair.getSecond()); + System.out.println(emptyPair.equals(Pair.of(null, null))); + + // Проверяем корректность hashCode + System.out.println("pair: " + pair.hashCode()); + System.out.println("pair2: " + pair2.hashCode()); } 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 { - - public SavedList(File file) { +public class SavedList extends AbstractList +{ + private File DiskList; + private ArrayList ArrList = new ArrayList(); + public SavedList(File file) + { + DiskList = file; + try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) + { + ArrList = (ArrayList) ois.readObject(); + } catch (Exception e) + { + System.out.println(e.getMessage()); + } } @Override - public E get(int index) { - return null; + public E get(int index) + { + E sv = ArrList.get(index); + return sv; } @Override - public E set(int index, E element) { - return null; + public E set(int index, E element) + { + E sv = ArrList.set(index, element); + ListWrite(); + return sv; } @Override - public int size() { - return 0; + public int size() + { + int sv = ArrList.size(); + return sv; } @Override - public void add(int index, E element) { + public void add(int index, E element) + { + ArrList.add(index,element); + ListWrite(); } @Override - public E remove(int index) { - return null; + public E remove(int index) + { + E sv = ArrList.remove(index); + ListWrite(); + return sv; + } + + public void ListWrite() + { + if(DiskList.exists()) + { + DiskList.delete(); + } + try (ObjectOutputStream ois = new ObjectOutputStream(new FileOutputStream(DiskList))) { + ois.writeObject(ArrList); + } catch (Exception e) + { + System.out.println(e.getMessage()); + } } -} +} \ 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..1259fac9 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,11 +1,8 @@ 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.*; public class Task03Main { @@ -18,7 +15,70 @@ public static void main(String[] args) throws IOException { } - public static List> findAnagrams(InputStream inputStream, Charset charset) { - return null; + public static List> findAnagrams(InputStream inputStream, Charset charset) + { + List> group = new ArrayList<>(); + Map> anagramMap = new HashMap<>(); + + try (BufferedReader buffer = new BufferedReader(new InputStreamReader(inputStream, charset))) + { + String string; + while ((string = buffer.readLine()) != null) + { + String word = string.toLowerCase(); + String wordSorted = sortCharacters(word); + + if(wordSorted.length() < 3 || !wordSorted.matches("[а-яё]+")) + continue; + + if (!anagramMap.containsKey(wordSorted)) + { + SortedSet anagramGroup = new TreeSet<>(); + anagramGroup.add(word); + group.add(anagramGroup); + anagramMap.put(wordSorted, anagramGroup); + } else + { + Set anagramGroup = anagramMap.get(wordSorted); + anagramGroup.add(word); + } + } + } catch (IOException e) + { + e.printStackTrace(); + } + + Filter(group); + sortAnagrams(group); + + return group; + } + + public static void Filter(List> collection) + { + Iterator> it = collection.listIterator(); + while(it.hasNext()) + { + Set set = it.next(); + if(set.size() <= 1) + it.remove(); + } + } + + public static void sortAnagrams(List> anagramGroups) + { + anagramGroups.sort(Comparator.comparing(Task03Main::getFirstElement)); + } + + private static String getFirstElement(Set set) + { + return set.stream().findFirst().orElse(""); + } + + private static String sortCharacters(String word) + { + char[] charArray = word.toLowerCase().toCharArray(); + Arrays.sort(charArray); + return new String(charArray); } -} +} \ No newline at end of file diff --git a/testlist.dat b/testlist.dat new file mode 100644 index 0000000000000000000000000000000000000000..46d580be4a8bd2c23a2e5446516ab67fa33619b3 GIT binary patch literal 66 zcmZ4UmVvdnh(S0ju`E%qv?Mb}&#|Z|vC=2AxTK=-lI+amiF2757(E$SiZiQHD+(AG R7?{dgKx7F6V-yHi008)<6TJWc literal 0 HcmV?d00001