-
Notifications
You must be signed in to change notification settings - Fork 203
Expand file tree
/
Copy pathTask03Main.java
More file actions
37 lines (32 loc) · 1.4 KB
/
Task03Main.java
File metadata and controls
37 lines (32 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.example.task03;
import java.io.*;
import java.nio.charset.Charset;
import java.util.*;
import java.util.stream.Collectors;
public class Task03Main {
public static void main(String[] args) throws IOException {
List<Set<String>> anagrams = findAnagrams(new FileInputStream("task03/resources/singular.txt"), Charset.forName("windows-1251"));
for (Set<String> anagram : anagrams) {
System.out.println(anagram);
}
}
public static List<Set<String>> findAnagrams(InputStream inputStream, Charset charset) {
Map<String, TreeSet<String>> result = new TreeMap<>();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset))) {
List<String> lines = reader.lines()
.map(String::toLowerCase)
.filter(str -> str.matches("[а-яё]+") && str.length() >= 3)
.collect(Collectors.toList());
for (String line : lines) {
char[] symbols = line.toCharArray();
Arrays.sort(symbols);
String key = new String(symbols);
result.computeIfAbsent(key, value -> new TreeSet<>()).add(line);
}
} catch (IOException e) { }
return result.values()
.stream()
.filter(value -> value.size() >= 2)
.collect(Collectors.toList());
}
}