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

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

Java for循環(huán)與Stream .forEach之間有什么區(qū)別

Java for循環(huán)與Stream .forEach之間有什么區(qū)別

慕絲7291255 2023-03-09 10:25:53
下面的 for 循環(huán)生成一組 lambda 表達(dá)式。 Callable<String>[] tasks = new Callable[messageCount]; for (int i = 0; i < count; i++) {   tasks[i] = () -> msg; }對(duì)流 forEach 進(jìn)行相同的嘗試會(huì)產(chǎn)生空值。 Arrays.stream(tasks).forEach(t -> {   t = () -> message; });我錯(cuò)過(guò)了什么?我該如何解決?
查看完整描述

2 回答

?
智慧大石

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

在您的第一個(gè)代碼示例中,您將 lambda 表達(dá)式分配() -> msgtasks數(shù)組的每個(gè)元素。

但是,在第二個(gè)示例中,您將 lambda 表達(dá)式分配() -> msg給類型為 的臨時(shí)變量。的目的是將流的元素傳遞給以某種方式使用這些元素的消費(fèi)者。如果您以某種方式分配給消費(fèi)者的參數(shù),流的來(lái)源將不會(huì)反映這一點(diǎn)。這樣的操作甚至可能沒(méi)有任何意義:tCallable<String>Stream#forEach

IntStream.range(1,10).filter((x) -> (x % 2 == 0)).forEach((x) -> {++x;});

這與 Java 流的一般主題相關(guān):它們是用于生成、轉(zhuǎn)換、過(guò)濾和使用數(shù)據(jù)的單向管道。當(dāng)數(shù)據(jù)從Arrays.stream供應(yīng)商流出時(shí),它只能沿一個(gè)方向流入消費(fèi)者 ( forEach);下游所做的更改不會(huì)傳播回上游。


查看完整回答
反對(duì) 回復(fù) 2023-03-09
?
12345678_0001

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

您的流代碼等效于以下for循環(huán):

for (Callable<String> t : tasks) {
    t = () -> message;
}

它本身相當(dāng)于:

for (int i = 0; i < tasks.length; i++) {
    Callable<String> t = tasks[i];
    t = () -> msg;
}

改變 的值t不會(huì)改變 的值tasks[i]。

要?jiǎng)?chuàng)建長(zhǎng)度messageCount為 lambda 表達(dá)式的數(shù)組,請(qǐng)使用流:

Callable<String>[] tasks = IntStream.range(0, messageCount)
                                    .mapToObj(i -> (Callable<String>) () -> msg)
                                    .toArray(Callable[]::new);


查看完整回答
反對(duì) 回復(fù) 2023-03-09
  • 2 回答
  • 0 關(guān)注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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