【发布时间】:2016-12-02 16:30:11
【问题描述】:
我从 Java 8 开始,我有一个迁移项目。我已经阅读了很多使用 foreach 或流的文档和教程,但我还有一个小问题。我没有找到答案,只是简单的教程示例。
我正在尝试改变这个循环:
for ( Map.Entry<Neuron, Double> entry: this.entries.entrySet() ) {
value += entry.getKey().getExitValue() * entry.getValue();
}
此解决方案不匹配,我知道原因(匿名 class=> 最终/本地变量)
this.entries.forEach( (neuron, weight) -> {
value += neuron.getExitValue() * weight;
});
但只有一个 foreach 我不知道这个简单的操作是怎么做的。
我认为这很容易,但是...
我尝试过使用流,但我遇到了类似的问题。
Double sum = entries.entrySet()
.stream()
.forEach( entry-> { ? } );
提前谢谢你。
【问题讨论】:
-
不要用
forEach替换循环。这不是一个改进。如果您要进行函数式编程,最好忘记forEach的存在。由于您是从条目计算的 summing 值,因此您应该考虑这个方向,即value = entries.entrySet().stream() .mapToDouble(e -> e.getKey().getExitValue() * e.getValue()) .sum() -
@Holger 这应该是一个答案。
-
您好,正确答案。我在想这个周末,迁移这个循环没有用(因为在这种情况下不是函数式编程)。您与 mapToDouble 的解决方案也正确匹配。祝你今天过得愉快。谢谢。
标签: dictionary lambda java-8 java-stream