0
我有兩個流,一個包含A的對象,一個包含B的對象,它們的長度相同。現在我有一個名爲C的類,它包含A和B作爲它的字段。如何使用流合併兩個流?
class C {
A a;
B b;
}
如何使用流操作將兩個流合併爲一個流?
我有兩個流,一個包含A的對象,一個包含B的對象,它們的長度相同。現在我有一個名爲C的類,它包含A和B作爲它的字段。如何使用流合併兩個流?
class C {
A a;
B b;
}
如何使用流操作將兩個流合併爲一個流?
如果您在類路徑中有番石榴,看看在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;
}
試試這個:
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]
拉姆達聯合:http://www.programcreek.com/2014/01/concat-streams-in- java-8/ – duffymo
@duffymo OP不問concat,我想這是關於壓縮流。 –