Java 8 Stream API相当于嵌套for循环

时间:2015-11-30 12:21:48

标签: java lambda java-8

是否可以使用单个Java8 Stream API指令替换此示例中执行的处理,而不是嵌套for循环?

 public static void main(String[] args) {
    List<BeanA> aList = Arrays.asList(new BeanA(), new BeanA(), new BeanA());
    List<BeanB> bList = Arrays.asList(new BeanB(), new BeanB(), new BeanB());

    List<Bean> result = new ArrayList<>();
    for (BeanA a : aList) {
        for (BeanB b : bList) {
            result.add(new Bean(a, b));
        }
    }
    System.out.println("size:" + result.size());
    System.out.println("result:" + result);
}

public static class BeanA {
}

public static class BeanB {
}

public static class Bean {
    private BeanA a;
    private BeanB b;

    public Bean(BeanA a, BeanB b) {
        this.a = a;
        this.b = b;
    }
}

1 个答案:

答案 0 :(得分:4)

您可以使用Stream来实现,但即使使用Stream,也无法避免嵌套迭代,因为您希望生成aList.size() * bList.size() Bean个实例

List<Bean> result =
    aList.stream()
         .flatMap(a->bList.stream().map(b->new Bean(a,b)))
         .collect(Collectors.toList());