2017-07-05 120 views
0

我有兩個流,一個包含A的對象,一個包含B的對象,它們的長度相同。現在我有一個名爲C的類,它包含A和B作爲它的字段。如何使用流合併兩個流?

class C { 
    A a; 
    B b; 
} 

如何使用流操作將兩個流合併爲一個流?

+0

拉姆達聯合:http://www.programcreek.com/2014/01/concat-streams-in- java-8/ – duffymo

+0

@duffymo OP不問concat,我想這是關於壓縮流。 –

回答

0

如果您在類路徑中有番石榴,看看在Streams.zip實用程序:

Stream<C> streamC = Streams.zip(streamA, streamB, C::new); 

這假定C具有接受AB構造:

public C(A a, B b) { 
    this.a = a; 
    this.b = b; 
} 
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]