基本上,我想将以下内容作为单行代码:
int sum = initialValue;
for (int n : collectionOfInts) {
sum += n;
}
return sum;
我看到有http://functionaljava.org/examples/1.5/#Array.foldLeft,但我不想复制该集合。
答案 0 :(得分:3)
我看到有http://functionaljava.org/examples/1.5/#Array.foldLeft,但我不想复制该集合。
如果您使用IterableW而不是数组的foldLeft,则无需复制任何内容。
答案 1 :(得分:0)
很抱歉,它在Java 7中仍然不存在。您将不得不等待Java 8,其中将实现Closures。
与此同时,您可以使用FunctionalJava,Guava或兼容JVM的,支持闭包的语言,例如Groovy。
答案 2 :(得分:0)
只是为了好玩 - 以下是没有外部库的方法:
return fold(collectionOfInts, 0, ADD);
哦,这是其余的:)。
static <X, Y> X fold(final Iterable<? extends Y> gen, final X initial, final Function2<? super X, ? super Y, ? extends X> function) {
final Iterator<? extends Y> it = gen.iterator();
if (!it.hasNext()) {
return initial;
}
X acc = initial;
while (it.hasNext()) {
acc = function.apply(acc, it.next());
}
return acc;
}
static final Function2<Integer, Integer, Integer> ADD = new Function2<Integer, Integer, Integer>() {
@Override
public Integer apply(Integer a, Integer b) {
return a + b;
}
};
interface Function2<A, B, C> {
C apply(A a, B b);
}