使用Java Stream API创建对象列表

时间:2018-10-26 20:15:26

标签: java java-stream

我有以下数据结构:

class A {
     String domain;
     List<B> refiners;
}

class B {
    String name;
    String signature;
}

class C {
    String domain;
    String name;
    String signature;

    public C(A a, B b) {
        this.domain = a.domain;
        this.name = b.name;
        this.signature = b.signature;
    }
}

拥有一个List<A>,我该如何使用Java Streams API创建一个List<C>。现在将每个成员都视为公开成员。

2 个答案:

答案 0 :(得分:0)

在这里进行假设,但是您可以使用flatMapmap为每个C中的每个B创建一个A

List<A> listA = ...;

List<C> listC = listA.stream()
    .flatMap(a -> a.refiners.stream()
        .map(b -> {
            C c = new C();
            c.domain = a.domain;
            c.name = b.name;
            c.signature = b.signature;
            return c;
        }))
    .collect(Collectors.toList());

答案 1 :(得分:0)

List<C> cs = as.stream().flatMap((a -> { 
        return a.refiners.stream().map(b -> {
            return new C(a, b);
        });
    })).collect(Collectors.toList());

其中asA实例的列表。