Java 如何使用流合并两个流?

Java 如何使用流合并两个流?,java,Java,我有两个流,一个包含A的对象,一个包含B的对象,它们的长度相同。现在我有一个叫做C的类,它包含a和B作为它的字段 class C { A a; B b; } 如何使用流操作将两个流合并为一个流?如果类路径中有番石榴,请查看该实用程序: 试试这个: public class ZipTest{ static A[] arrayA; static B[] arrayB; public static void main(String[] args) {

我有两个流,一个包含A的对象,一个包含B的对象,它们的长度相同。现在我有一个叫做C的类,它包含a和B作为它的字段

class C {
    A a;
    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;}
}
公共类ZipTest{
静态A[]arrayA;
静态B[]阵列B;
公共静态void main(字符串[]args){
//更方便压缩数组。如果从流开始
//收集到数组:arrayA=streamA.toArray();
arrayA=新A[]{新A(“a1”)、新A(“a2”)、新A(“a3”)};
arrayB=new B[]{new B(“b1”)、new B(“b2”)、new B(“b3”)};
Stream zippedA_B=IntStream.range(0,2*Math.min(arrayA.length,arrayB.length))
.mapToObj(i->getElement(i));
System.out.println(Arrays.toString(zippedA_B.toArray());
}
私有静态对象getElement(int i){
返回((i%2)==0)?arrayA[i/2]:arrayB[i/2];
}
}
甲级{
字符串名;
(字符串名){this.name=name;}
@凌驾
公共字符串toString(){return name;}
}
B类{
字符串名;
B(字符串名){this.name=name;}
@凌驾
公共字符串toString(){return name;}
}
输出:

[a1、b1、a2、b2、a3、b3]


lambda union:@duffymo OP不是在问concat,我想这是关于压缩流的问题。
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;}
}