为什么在同一流上调用两个终端操作后不引发IllegalStateException?] <

问题描述 投票:0回答:2
我被理解为collect()forEach()都是流终端操作,并且在同一流上同时调用它们会抛出IllegalStateException。但是,以下代码成功编译并以升序打印每个String的长度。没有异常被抛出。怎么会这样?

List<String> list = Arrays.asList("ant", "bird", "chimpanzee", "dolphin"); list.stream().collect(Collectors.groupingBy(String::length)) .forEach((a, b) -> System.out.println(a));

我被理解为collect()和forEach()都是流终端操作,并且在同一流上同时调用它们会抛出IllegalStateException。但是,以下...
java java-stream illegalstateexception
2个回答
0
投票
list.stream()生成的流被collect操作消耗。但是,作为分组结果的操作会根据字符串的大小生成Map<Integer, List<String>>

0
投票
您正在调用的forEach方法不是Stream::forEach方法,而是Map::forEach方法,就像您在Map::forEach的返回值(即collect(...))上调用它一样。 Map方法的一个特点是它需要一个Map::forEach,而不是BiConsumer
© www.soinside.com 2019 - 2024. All rights reserved.