第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么在同一流上調(diào)用兩個(gè)終端操作后不會(huì)拋出 IllegalStateException?

為什么在同一流上調(diào)用兩個(gè)終端操作后不會(huì)拋出 IllegalStateException?

繁星coding 2023-09-27 15:25:32
我知道collect()和forEach()都是流終端操作,并且在同一個(gè)流上調(diào)用它們會(huì)拋出一個(gè)IllegalStateException. 但是,以下代碼可以成功編譯并按升序打印每個(gè)字符串的長度。不會(huì)引發(fā)任何異常。怎么會(huì)這樣呢?List<String> list = Arrays.asList("ant", "bird", "chimpanzee", "dolphin");list.stream().collect(Collectors.groupingBy(String::length))        .forEach((a, b) -> System.out.println(a));
查看完整描述

2 回答

?
慕蓋茨4494581

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊

您調(diào)用的方法forEach不是Stream::forEach方法,而是Map::forEach方法,因?yàn)槟?的返回值(collect(...)Map.?該方法的一個(gè)特點(diǎn)Map::forEach是它采用BiConsumer, 而不是Consumer。流forEach永遠(yuǎn)不會(huì)接受帶有兩個(gè)參數(shù)的 lambda!

因此,您只調(diào)用一個(gè)終端操作,即collect流上的操作。在那之后,您再也沒有對流執(zhí)行任何操作(您開始使用返回的Map),這就是IllegalStateExcepton拋出 no 的原因。

要實(shí)際在同一流上調(diào)用兩個(gè)終端操作,您需要首先將流放入變量中:

List<String> list = Arrays.asList("ant", "bird", "chimpanzee", "dolphin");

Stream<String> stream = list.stream(); // you need this extra variable.

stream.collect(Collectors.groupingBy(String::length));

stream.forEach((a) -> System.out.println(a)); // this will throw an exception, as expected



查看完整回答
反對 回復(fù) 2023-09-27
?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

生成的流list.stream()由該操作消耗collect。但作為分組結(jié)果的操作是Map<Integer, List<String>>根據(jù)字符串的大小生成的。

thenforEach調(diào)用Map由 生成的this 條目,因此后者collect不會(huì)拋出異常。IllegalStateException


查看完整回答
反對 回復(fù) 2023-09-27
  • 2 回答
  • 0 關(guān)注
  • 122 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)