什么是Java相当于C ++的累积或Groovy的注入?

时间:2011-12-13 22:13:39

标签: java functional-programming

基本上,我想将以下内容作为单行代码:

        int sum = initialValue;
        for (int n : collectionOfInts) {
            sum += n;
        }
        return sum;

我看到有http://functionaljava.org/examples/1.5/#Array.foldLeft,但我不想复制该集合。

3 个答案:

答案 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);
}