传递非关联函数来减少

Nic*_*ell 8 java java-8 java-stream

我的程序有这一行:

Function<String, Integer> f = (String s) -> s.chars().reduce(0, (a, b) -> 2 * a + b);
Run Code Online (Sandbox Code Playgroud)

传递给reduce的函数不是关联的.Reduce的文档说传递的函数必须是关联的.

我如何将其重写为不破坏reduce合同的表达式?

Eug*_*ene 5

在当前的实现和IFF下,您将不会使用并行 -您现在拥有的是安全的。显然,如果您对这些免责声明表示满意。

或者,您显然可以使用for循环创建该函数:

 Function<String, Integer> f = s -> {
        int first = s.charAt(0) * 2 + s.charAt(1);
        int total = first;

        for (int x = 1; x < s.length() - 1; x++) {
            total = total * 2 + s.charAt(x + 1);
        }

        return total;

    };
Run Code Online (Sandbox Code Playgroud)

  • @NickODell你甚至可以做一个boxed.reduce(three-arguments)(三个参数),然后简单地为合并抛出一个Exception,它将被并行计算调用。但*即使*也不能保证*仅*用于并行处理,但可以 (2认同)
  • @NickODell我知道,我的意思是您可以*明确*禁止这种方式的并行化 (2认同)