diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..dfccad45 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,51 @@ package com.example.task01; -public class Pair { - // TODO напишите реализацию -} +import java.util.Objects; +import java.util.Optional; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public class Pair { + private final T first; + private final K second; + + private Pair(T first, K second){ + this.first = first; + this.second = second; + } + + public T getFirst(){ + return first; + } + + public K getSecond(){ + return second; + } + + public static Pair of(T first, K second){ + return new Pair<>(first, second); + } + + public void ifPresent(BiConsumer consumer) { + if (first != null && second != null) + consumer.accept(first, second); + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (!(obj instanceof Pair)) { + return false; + } + + Pair other = (Pair) obj; + return Objects.equals(first, other.first) && Objects.equals(second, other.second); + } + + public int hashCode() { + return Objects.hash(first, second); + } + +} \ No newline at end of file diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 54dde94f..7255a697 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -1,28 +1,21 @@ package com.example.task01; import java.io.IOException; -import java.io.InputStream; 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! - */ - + 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..5ab73ea2 100644 --- a/task02/src/com/example/task02/SavedList.java +++ b/task02/src/com/example/task02/SavedList.java @@ -1,35 +1,66 @@ package com.example.task02; import java.io.File; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.Serializable; +import java.nio.file.Files; import java.util.AbstractList; +import java.util.ArrayList; +import java.util.List; public class SavedList extends AbstractList { + File file; + List savedList = new ArrayList<>();; + 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; + } + + public 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 = 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..48e43af2 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -6,6 +6,10 @@ import java.nio.charset.Charset; import java.util.List; import java.util.Set; +import java.io.*; +import java.util.*; +import java.util.stream.Collectors; + public class Task03Main { @@ -15,10 +19,29 @@ public static void main(String[] args) throws IOException { for (Set anagram : anagrams) { System.out.println(anagram); } - } public static List> findAnagrams(InputStream inputStream, Charset charset) { - return null; + Map> anagramMap = new TreeMap<>(); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset))){ + List strings = reader.lines() + .map(String::toLowerCase) + .filter(x -> x.chars().allMatch(c -> c >= 'а' && c <= 'я') && x.length() >= 3) + .collect(Collectors.toList()); + for (String string : strings) { + char[] stringChars = string.toCharArray(); + Arrays.sort(stringChars); + String key = new String(stringChars); + anagramMap.computeIfAbsent(key, set -> new TreeSet<>()).add(string); + } + } catch (IOException e) { + System.err.println("Ошибка ввода-вывода"); + } + + return anagramMap.values() + .stream() + .filter(set -> set.size() >= 2) + .collect(Collectors.toList()); } }