[英]Removing brackets from list of anagrams
我在移除括號時遇到問題
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());
}
}
輸出是
[倉鼠,阿默斯特]
[生殖器,明膠]
它應該是
倉鼠阿默斯特
生殖器明膠
您只需要打印出集合,就可以使用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();});
這是因為forEach(System.out::println)
調用Set
calss中的toString()
方法。
將此方法添加到您的班級
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();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.