当前位置:  开发笔记 > 编程语言 > 正文

使用Java 8流转换经典嵌套for循环

如何解决《使用Java8流转换经典嵌套for循环》经验,为你挑选了1个好方法。

我想使用Java 8流API转换以下代码

List deck = new ArrayList<>();
for (Suit s: Suit.values())
{
    for (Rank r: Rank.values())
    {
        deck .add(new Card(r, s));
    }
}

我出来了

List deck = new ArrayList<>();
Arrays.stream(Suit.values())
    .forEach(s -> Arrays.stream(Rank.values())
        .forEach(r -> deck.add(new Card(r, s))));

但我不喜欢它,因为它在列表中有副作用.

还有另一种优雅的方式,从流生成列表而不是吗?



1> Dmitry Gorko..:

使用

List cards = Arrays.stream(Suit.values())
                .flatMap(s -> Arrays.stream(Rank.values()).map(r -> new Card(r, s)))
                .collect(Collectors.toList());

实际上它是简单的笛卡尔积.我从Java 8中的流的笛卡尔积作为流(仅使用流)并根据您的情况进行了调整.如果你想在里面做第三个循环,你需要使用这个答案中的代码.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有