本文介紹了使用Java 8流轉(zhuǎn)換經(jīng)典嵌套for循環(huán)的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我想使用Java 8流API轉(zhuǎn)換以下代碼
List<Card> deck = new ArrayList<>();
for (Suit s: Suit.values())
{
for (Rank r: Rank.values())
{
deck .add(new Card(r, s));
}
}
我拿出了這個(gè)
List<Card> deck = new ArrayList<>();
Arrays.stream(Suit.values())
.forEach(s -> Arrays.stream(Rank.values())
.forEach(r -> deck.add(new Card(r, s))));
但我不喜歡它,因?yàn)樗鼘?duì)列表有副作用。
有沒(méi)有其他更好的方法,可以從流中生成列表?
推薦答案
使用
List<Card> cards = Arrays.stream(Suit.values())
.flatMap(s -> Arrays.stream(Rank.values()).map(r -> new Card(r, s)))
.collect(Collectors.toList());
實(shí)際上是簡(jiǎn)單的笛卡爾乘積。我引用了Cartesian product of streams in Java 8 as stream (using streams only)中的一個(gè)例子,并根據(jù)您的情況進(jìn)行了調(diào)整。如果要在內(nèi)部創(chuàng)建第三個(gè)循環(huán),則需要使用此答案中的代碼。
這篇關(guān)于使用Java 8流轉(zhuǎn)換經(jīng)典嵌套for循環(huán)的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,