为什么番石榴图书馆没有减少?

时间:2014-10-20 22:20:42

标签: java android guava reduce

我想在我的Android应用程序中使用函数式编程,因为Java8不可用我决定使用Guava Library。但显然在番石榴图书馆里没有REDUCE聚合。如果有人可以解释为什么会如此,我很想知道,但我需要的是一种解决方法。

如何模拟Guava中的REDUCE / DROP函数编程功能?例如,如何在不编码自己的情况下计算FluentInterface的总和或平均值(函数式编程的主要原理之一,不是吗?)。

如果您使用Android中的其他库完成此操作,请告诉我。

1 个答案:

答案 0 :(得分:9)

Guava不支持这一点,因为你需要构建的匿名类最终比传统的循环命令更加冗长。 Guava故意仅提供一组有限的函数式编程风格功能:例如, https://github.com/google/guava/wiki/FunctionalExplained#Caveats了解详情。

让我们假设Guava确实提供了这个。它必须看起来像

FluentIterable.from(integers).foldr(
  new BiFunction<Integer, Integer, Integer>() {
    @Override Integer sum(Integer a, Integer b) {
      return a + b;
    }
  }, 0);

...与...

int sum = 0;
for (int value : integers) {
   sum += value;
}

第二个版本需要的样板少得多。在语言中没有lambdas的情况下,这是不值得的。