我有两个流,一个包含A的对象,一个包含B的对象,它们的长度相同。现在我有一个名为C的类,它包含A和B作为其字段。
class C {
A a;
B b;
}
如何使用流操作将两个流合并为一个流?
答案 0 :(得分:0)
如果您的类路径中有Guava,请查看Streams.zip
实用程序:
Stream<C> streamC = Streams.zip(streamA, streamB, C::new);
这假定C
有一个接受A
和B
的构造函数:
public C(A a, B b) {
this.a = a;
this.b = b;
}
答案 1 :(得分:0)
试试这个:
public class ZipTest{
static A[] arrayA;
static B[] arrayB;
public static void main(String[] args) {
//more convenient to zip arrays. if you start with streams
//collect to arrays : arrayA = streamA.toArray();
arrayA = new A[] {new A("a1"), new A("a2"), new A("a3")};
arrayB = new B[] {new B("b1"), new B("b2"), new B("b3")};
Stream<Object> zippedA_B = IntStream.range(0, 2* Math.min(arrayA.length, arrayB.length))
.mapToObj( i -> getElement(i) );
System.out.println(Arrays.toString(zippedA_B.toArray()));
}
private static Object getElement(int i) {
return ((i%2) == 0) ? arrayA[i/2] : arrayB[i/2];
}
}
class A{
String name;
A(String name){ this.name = name;}
@Override
public String toString() {return name;}
}
class B{
String name;
B(String name){ this.name = name;}
@Override
public String toString() {return name;}
}
输出:
[a1,b1,a2,b2,a3,b3]