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 00000000..e09632d3 Binary files /dev/null and b/task02/list1.dat differ diff --git a/task02/list1a.dat b/task02/list1a.dat new file mode 100644 index 00000000..e23b42f9 Binary files /dev/null and b/task02/list1a.dat differ diff --git a/task02/list2.dat b/task02/list2.dat new file mode 100644 index 00000000..5f09bec6 Binary files /dev/null and b/task02/list2.dat differ diff --git a/task02/list4.dat b/task02/list4.dat new file mode 100644 index 00000000..76e4dede Binary files /dev/null and b/task02/list4.dat differ diff --git a/task02/src/com/example/task02/SavedList.java b/task02/src/com/example/task02/SavedList.java index 6b3a037d..f8ace99b 100644 --- a/task02/src/com/example/task02/SavedList.java +++ b/task02/src/com/example/task02/SavedList.java @@ -2,34 +2,74 @@ import java.io.File; import java.io.Serializable; +import java.io.*; import java.util.AbstractList; +import java.util.ArrayList; -public class SavedList 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 00000000..46d580be Binary files /dev/null and b/testlist.dat differ