我删除括号有问题
public class Main {
public static void main(String[] args) throws IOException {
getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(),
StandardCharsets.UTF_8)).forEach(System.out::println);
}
private static String canonicalize(String string) {
return Stream.of(string.split("")).sorted().collect(Collectors.joining());
}
public static List<Set<String>> getAnagrams(Reader rr) {
Map<String, Set<String>> mapa = new BufferedReader(rr).lines().flatMap(Pattern.compile("\\W+")::splitAsStream)
.collect(Collectors.groupingBy(Main::canonicalize, Collectors.toSet()));
return mapa.values().stream().filter(lista -> lista.size() > 1).collect(Collectors.toList());
}
}
输出
[hamster,amherst]
[生殖器,明胶]
它应该是
仓鼠阿默斯特 生殖器明胶
答案 0 :(得分:2)
你只是打印你的集合,你有getAngarams()将返回字符串集列表,有很多方法可以获得没有括号的原始元素,其中一种可能性是迭代器:
替换你的:
getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(),
StandardCharsets.UTF_8)).forEach(System.out::println);
使用:
getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(),
StandardCharsets.UTF_8)).iterator().forEachRemaining(x -> {for (String s : x) System.out.print(s + " ");
System.out.println();});
答案 1 :(得分:1)
这是因为forEach(System.out::println)
调用了toString()
calss中的Set
方法。
将此方法添加到您的班级
public static void println(Set<String> items) {
for (String item : items) {
System.out.print(item + " ");
}
System.out.println();
}
并将代码forEach(System.out::println)
替换为forEach(Main::println)
或使用此方法而不是添加新方法:
getAnagrams(new InputStreamReader(new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream(), StandardCharsets.UTF_8))
.forEach(items -> {
for (String item : items) {
System.out.print(item + " ");
}
System.out.println();
});