从字谜列表中删除括号

时间:2017-12-10 16:59:56

标签: java

我删除括号有问题

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]
      [生殖器,明胶]

它应该是

  仓鼠阿默斯特      生殖器明胶

2 个答案:

答案 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();
            });