diff --git a/task01/src/com/example/task01/Pair.java b/task01/src/com/example/task01/Pair.java index f6fb603b..d0f5ddad 100644 --- a/task01/src/com/example/task01/Pair.java +++ b/task01/src/com/example/task01/Pair.java @@ -1,5 +1,39 @@ package com.example.task01; -public class Pair { +import java.util.Objects; +import java.util.function.BiConsumer; + +public class Pair { + private final F first; + private final S second; + private Pair(F first, S second){ + this.first = first; + this.second = second; + } + public static Pair of(F first, S second){ + return new Pair(first, second); + } + public F getFirst() { + return first; + } + public S getSecond() { + return second; + } + public boolean equals(Object obj){ + if (this == obj) + return true; + if (obj == null || getClass() != obj.getClass()) + return false; + Pair another = (Pair)obj; + return Objects.equals(this.first, another.first) && Objects.equals(this.second, another.second); + } + public int hashCode(){ + return Objects.hash(first, second); + } + public void ifPresent(BiConsumer operation){ + if(first != null && second != null){ + operation.accept(first, second); + } + } // TODO напишите реализацию } diff --git a/task01/src/com/example/task01/Task01Main.java b/task01/src/com/example/task01/Task01Main.java index 54dde94f..e4d36b53 100644 --- a/task01/src/com/example/task01/Task01Main.java +++ b/task01/src/com/example/task01/Task01Main.java @@ -8,7 +8,7 @@ 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" @@ -21,7 +21,7 @@ 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! - */ + } diff --git a/task02/src/com/example/task02/SavedList.java b/task02/src/com/example/task02/SavedList.java index 6b3a037d..f6913351 100644 --- a/task02/src/com/example/task02/SavedList.java +++ b/task02/src/com/example/task02/SavedList.java @@ -1,35 +1,67 @@ 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 { + private final ArrayList list = new ArrayList<>(); + private final File file; public SavedList(File file) { + this.file = file; + getData(); + } + + private void getData(){ + if (!file.exists()) { + return; + } + try(ObjectInputStream objIS = new ObjectInputStream(Files.newInputStream(file.toPath()))){ + ArrayList data = (ArrayList) objIS.readObject(); + list.addAll(data); + }catch (ClassNotFoundException | IOException e){ + throw new RuntimeException("Error in getting data from file!", e); + } + } + + private void saveData(){ + try(ObjectOutputStream objOS = new ObjectOutputStream(Files.newOutputStream(file.toPath()))){ + objOS.writeObject(list); + } + catch (IOException e){ + throw new RuntimeException("Error in setting data to file!", e); + } } @Override public E get(int index) { - return null; + return list.get(index); } @Override public E set(int index, E element) { - return null; + E oldElement = list.set(index, element); + saveData(); + return oldElement; } @Override public int size() { - return 0; + return list.size(); } @Override public void add(int index, E element) { + list.add(index, element); + saveData(); } @Override public E remove(int index) { - return null; + E removedElement = list.remove(index); + saveData(); + return removedElement; } } diff --git a/task03/src/com/example/task03/Task03Main.java b/task03/src/com/example/task03/Task03Main.java index 7f255e98..3c856c89 100644 --- a/task03/src/com/example/task03/Task03Main.java +++ b/task03/src/com/example/task03/Task03Main.java @@ -1,11 +1,9 @@ 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 { @@ -15,10 +13,27 @@ 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> 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 sorted = word.chars() + .sorted() + .mapToObj(c -> String.valueOf((char)c)) + .collect(Collectors.joining()); + result.computeIfAbsent(sorted, 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()); + //return null; } } diff --git a/testlist.dat b/testlist.dat new file mode 100644 index 00000000..c73617b1 Binary files /dev/null and b/testlist.dat differ