如何解决将带有两个计数器的循环转换为lambdas java 14
嗨,我尝试将这种方法转换为lambda表达式
List<Integer> euclid(int x,int y){
int q = 0; int r = x;
while (r >= y){
q++; r -= y;
}
return Arrays.asList(q,r);
}
与此
Stream.iterate(18,r -> r >= 6,r -> r -=6 ).count().map(Integer::intValue).collect(Collectors.toList());
解决方法
您需要维护两个变量的状态。例如:
Stream<List<Integer>> stream = Stream.iterate(
Arrays.asList(0,x),current -> current.get(1) > y,current -> Arrays.asList(current.get(0) + 1,current.get(1) - y));
现在您只需要选择其中一个,即最后一个,并且第一个元素最大即可:
return stream.max(comparingInt(current -> current.get(0))).get();
如果您以更有意义的类型存储/返回q / r对,可能更容易阅读;但是由于您要返回List<Integer>
,因此上述内容就足够了。
但是,请勿尝试为此使用流。使用原始代码,它更清晰,更有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。