pig*_*ack 2 java java-8 java-stream
这是我的代码:
// assuming HashMap<String, Integer> hashmap
double sum = hashmap.values().stream()
.reduce(.0, (i, v) -> i + Math.pow(v,2) + 0.5 );
Run Code Online (Sandbox Code Playgroud)
在这种情况下,reduce应该采用(Integer i)和(double v)并将它们相加并将此reduce作为double返回.
相反,我得到这个错误:
- The method reduce(Integer, BinaryOperator<Integer>) in the type Stream<Integer> is not applicable for the arguments (double, (<no type> i, <no type> v) -> {})
- Type mismatch: cannot convert from double to Integer
Run Code Online (Sandbox Code Playgroud)
降低,
但是,这个修复:
// assuming HashMap<String, Integer> hashmap
double sum = hashmap.values().stream()
.map((t)->(double)t)
.reduce(.0, (i, v) -> i + Math.pow(v,2) + 0.5 );
Run Code Online (Sandbox Code Playgroud)
这样做有更优雅的方式吗?
你只是想把它的值加起来v * v + 0.5?
如果是这样,最明确的解决方案是
double sum = 0;
for (int v : hashmap.values())
sum += v * v + 0.5;
Run Code Online (Sandbox Code Playgroud)
如果你必须使用流,答案是
double sum = hashmap.values().stream().mapToDouble((v) -> v * v + 0.5).sum();
Run Code Online (Sandbox Code Playgroud)
但尝试使用它是没有意义的,reduce()因为0.0它不是累加器的标识,并且累加器不是关联的.