java - 无论如何,是否可以设置取决于流链内流的结果的值

标签 java java-stream

我需要编写一个将返回指定控制台输出的流链。

我设法获得了正确的结果,但我不得不打破我的流链,我想知道是否有任何方法可以避免它

public class Main {
    public static void main(String[] args) throws IOException {
        Map<String, List<String>> map;
        int maxValue;
        map = new BufferedReader(
                new InputStreamReader(
                        new URL("http://wiki.puzzlers.org/pub/wordlists/unixdict.txt")
                                .openStream(), StandardCharsets.UTF_8))
                .lines().flatMap(Pattern.compile("[\\r\\n]")::splitAsStream)
                .collect(Collectors.groupingBy(s -> Stream.of(s.split(""))
                        .sorted().collect(Collectors.joining()), Collectors.toList()));

        maxValue = map.values().stream().mapToInt(List::size).max().getAsInt();

        map.values().stream().filter(l -> l.size() == maxValue).collect(Collectors.toList())
                .stream().sorted(Comparator.comparing(s -> s.get(0))).collect(Collectors.toList()).
                forEach(n -> System.out.println(n.stream().sorted().collect(Collectors.joining(" "))));
    }
}

我希望获得与代码中相同的结果,但不应将 maxValue 设置在流链外部,而应将其设置在内部。

最佳答案

您可以使用 TreeMap 及其最后一个条目来收集所有最大值:

new BufferedReader(new InputStreamReader(new URL("http://wiki.puzzlers.org/pub/wordlists/unixdict.txt").openStream(), StandardCharsets.UTF_8))
        .lines()
        .collect(Collectors.groupingBy(s -> Stream.of(s.split("")).sorted().collect(Collectors.joining()), Collectors.toList()))
        .entrySet().stream()
        .collect(Collectors.groupingBy(e -> e.getValue().size(), TreeMap::new, Collectors.toList()))
        .lastEntry().getValue()
        .stream().map(Map.Entry::getValue)
        .sorted(Comparator.comparing(s -> s.get(0)))
        .map(n -> n.stream().sorted().collect(Collectors.joining(" ")))
        .forEach(System.out::println);

关于java - 无论如何,是否可以设置取决于流链内流的结果的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55481801/

相关文章:

Java 8 Stream 修改可变变量

java - 与 ConcurrentSkipListSet 一起正常工作的即时比较器

loops - 使用流迭代 n 次而不是使用 for 循环来创建 n 个项目

java - 如何提取 Maven 配置文件中的公共(public)部分

java - JFrame java 应用程序中找不到资源

java - Collectors.toMap 仅当存在可选值时

java - 简化的 Java 8 Stream 将实体映射到模型

java - 在Java中如何计算目录中具有相同文件扩展名的文件数量?

Java - 配置对象属性

java - 运行程序时出现错误