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