Java 8将BiFunction应用于两个不同对象的列表

时间:2015-08-17 18:28:46

标签: java collections java-8 java-stream

我需要知道如何将BiFunction应用于两个不同对象的列表

List<A> listA;
List<B> listB;

private BiFunction<A,B,C> biFunction=new BiFunction<A,B,C>() {
    @Override
    public C apply(A a, B b) {
        C c=new C();

        return c;
    }
};

我需要获得List<C>,因此我必须将biFunctionlistAlistB一起使用。 我不知道如何在Java 8中执行此操作,我知道的唯一方法是:

List<C> listC=new ArrayList<>();
        for(int i=0;i<listA.size();i++)
            listC.add(biFunction.apply(listA.get(i),listB.get(i)));

显然listAlistB具有相同的尺寸 这是一个可怕的解决方案,请你建议一个更好的方法吗?

2 个答案:

答案 0 :(得分:7)

据我所知,不使用外部库的最简洁方法是:

List<A> listA;
List<B> listB;

BiFunction<A, B, C> biFunction = (a, b) -> {
    C c = new C();
    return c;
};

List<C> listC = IntStream.range(0, listA.size())
        .mapToObj(i -> biFunction.apply(listA.get(i), listB.get(i)))
        .collect(Collectors.toList());

答案 1 :(得分:0)

使用Stream<C> streamC = StreamUtils.zip(listA, listB, biFunction); 中的StreamUtils

{{1}}

它是开源的,所以请不要犹豫。