從本質上講,我想做到以下幾點作爲一個班輪:什麼是C++的積累或Groovy注入的Java等價物?
int sum = initialValue;
for (int n : collectionOfInts) {
sum += n;
}
return sum;
我看到有http://functionaljava.org/examples/1.5/#Array.foldLeft,但我寧願沒有複製的集合。
從本質上講,我想做到以下幾點作爲一個班輪:什麼是C++的積累或Groovy注入的Java等價物?
int sum = initialValue;
for (int n : collectionOfInts) {
sum += n;
}
return sum;
我看到有http://functionaljava.org/examples/1.5/#Array.foldLeft,但我寧願沒有複製的集合。
我看到有http://functionaljava.org/examples/1.5/#Array.foldLeft,但我寧願不必複製集合。
如果您使用IterableW而不是Array的foldLeft,則不必複製任何內容。
如何創建IterableW?我找不到任何例子? – 2011-12-13 23:31:55
對不起,它仍然不存在於Java 7中。您將不得不等待Java 8,其中將執行閉包。與此同時,您可以使用FunctionalJava,Guava或與JVM兼容的閉合語言,如Groovy。
我沒有在番石榴看到任何東西。你有什麼具體的想法? – 2011-12-13 22:58:52
只是爲了好玩 - 這裏是如何做到這一點無需外部庫:
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);
}
其實你不能用那種摺疊式的,等等與一個普通的Java分佈。不幸。 – bcc32 2011-12-13 22:17:43