Java 在流链中,是否仍然需要根据流的结果设置值

Java 在流链中,是否仍然需要根据流的结果设置值,java,java-stream,Java,Java Stream,我需要编写一个流链,它将返回指定的控制台输出 我设法得到了正确的结果,但我不得不打破我的流链,我想知道是否有任何方法可以避免它 公共类主{ 公共静态void main(字符串[]args)引发IOException{ 地图; int最大值; map=newbufferedreader( 新的InputStreamReader( 新网址(“http://wiki.puzzlers.org/pub/wordlists/unixdict.txt") .openStream(),StandardChar

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

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

公共类主{
公共静态void main(字符串[]args)引发IOException{
地图;
int最大值;
map=newbufferedreader(
新的InputStreamReader(
新网址(“http://wiki.puzzlers.org/pub/wordlists/unixdict.txt")
.openStream(),StandardCharsets.UTF_8))
.lines().flatMap(Pattern.compile(“[\\r\\n]”)::splitAsStream)
.collect(收集器.groupingBy->Stream.of(s.split)(“”)
.sorted().collect(collector.joining())、collector.toList());
maxValue=map.values().stream().mapToInt(列表::大小).max().getAsInt();
map.values().stream()
.stream().sorted(Comparator.comparing(s->s.get(0))).collect(collector.toList())。
forEach(n->System.out.println(n.stream().sorted().collect(collector.joining(“”));
}
}

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

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

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);

最初的问题是什么,您想对代码做什么?您流式处理这些行,然后使用
[\\r\\n]
再次拆分一行?我想要的是我的slution。更多的是在一条流链中完成所有操作而不破坏它。这一点很好!我删除了多余的拆分,这就是我要找的!谢谢你,塞缪尔