gpt4 book ai didi

java 8 动态链接时可以使用累加器吗

转载 作者:行者123 更新时间:2023-12-02 08:47:15 25 4
gpt4 key购买 nike

在处理 Mars Rover kata 时在 java 8 中,我们开始尝试实现最大的不变性,但我们最终陷入了这个困境:

rover = rover.move(new Commands("RFF");

...

class Rover{
...
public Rover move(Commands commands) {
Rover rover = this; //ignore IDE concurrency warning as Rover is designed to being immutable
for (Command command: commands) rover = rover.move(command);
return rover;
}

我们认为应该可以在这里练习 Streams 语法,但我们无法弄清楚:

return commands.foreach((this, rover, command) -> rover = rover.move(command)).getAccumulator();

以“this”作为种子,流动站作为累加器,命令作为数组中的每个命令。我以为我在函数式编程培训期间用 C# 做过这种事情。但不确定:)

最佳答案

您要找的接线员是 reduce 。你可以像这样使用它:

return commands.reduce(this, Rover::move, (r1, r2) -> { throw new UnsupportedOperationException(); });

不幸的是,reduce 要求您处理值的组合,而您的系统无法做到这一点。所以在这种情况下你必须抛出异常。我认为您当前的循环解决方案很好,正如其他评论所说,不建议“仅仅因为”切换到流。

关于java 8 动态链接时可以使用累加器吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60995695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com