我需要知道如何将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>
,因此我必须将biFunction
与listA
和listB
一起使用。
我不知道如何在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)));
显然listA
和listB
具有相同的尺寸
这是一个可怕的解决方案,请你建议一个更好的方法吗?
答案 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}}
它是开源的,所以请不要犹豫。