给出了2个具有相同数量元素的集合,比如List< String>. JAVA中有哪些优雅的方法可以在具有相应索引的集合的每个2个元素上应用仿函数?
比如,一个例子可能是:
列表与LT;字符串> = {“APPLE”,“PEAR”};
列表与LT;字符串> = {“BANANA”,“ORANGE”};
将字符串连接在一起的谓词将导致以下List< String>:
列表与LT;字符串> = {“APPLEBANANA”,“PEARORANGE”};
解决方法:
类似于Apache Commons Collections中的functor,我在过去创建了二进制等价物.
对于您的情况,可以使用二进制转换器类型对象,它接受两个输入对象并返回单个对象.以下是一些示例代码,它传达了我的方法:
// tranformer
interface BinaryTransformer<X, Y, Z> {
Z transform(X a, Y b);
}
// implementation for your problem
class ConcatTransformer implements BinaryTransformer<String, String, String> {
public String transform(String a, String b) {
return a + b;
}
}
// general use transformer
class BinaryListUtils {
public static <X, Y, Z> List<Z> collect(List<X> aList, List<Y> bList, BinaryTransformer<X, Y, Z> t) {
List<Z> ret = new ArrayList<Z>(aList.size());
Iterator<X> aIter = aList.iterator();
Iterator<Y> bIter = bList.iterator();
while(aIter.hasNext()) {
ret.add(t.transform(aIter.next(), bIter.next()));
}
}
}
HTH