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

u2g*_*les 3 java reduce android guava

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

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

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

Lou*_*man 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);
Run Code Online (Sandbox Code Playgroud)

...与...

int sum = 0;
for (int value : integers) {
   sum += value;
}
Run Code Online (Sandbox Code Playgroud)

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

  • Guava的观点是,目标本身并不是一种功能性的风格:目标是高效,可读的代码.功能样式只有在使代码更具可读性的情况下才有用,在这种情况下它不具备. (3认同)