当前位置: 首页 > 知识库问答 >
问题:

用两个计数器将循环while转换为lambdas Java 14

巫马昆杰
2023-03-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());

共有1个答案

宋昕
2023-03-14

您需要维护这两个变量的状态。例如:

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对,可能会更容易阅读;但是,由于您希望返回一个列表 ,上述内容就足够了。

但是,不要尝试使用流来实现这一点。使用原始代码,它更清晰,更高效。

 类似资料:
  • 问题内容: 我正在尝试将此for循环重写为for每个循环。 这就是我尝试过的 谁能指出我正确的方向?谢谢。 问题答案: 我认为您想得太多… :)

  • 问题内容: 我目前正在通过切换到PDO来更新我的应用。我有以下代码: 在上面的代码之后,var $ productidLst为1,2,我想使用与此等效的PDO: 我已经尝试了多种组合,但是没有成功,因此对此提供任何帮助将不胜感激(在第二个代码块$ res中是sql)。其次,我将参数$ productidLst设置为INT是否正确或应该是字符串? --------------------更新1 --

  • 我已经开始使用Java8,并尝试将代码中的一些循环和旧语法转换为lambdas和streams。 举个例子,我试图转换这个time和for循环到流,但我没有得到它的权利: 我想知道是否有可能将上面的示例转换为单个流,其中for循环内部有一个而循环。

  • 作为练习,我将一些旧代码转换为函数流。我对溪流了解不多。看起来转换这段代码应该很简单,但我运气不太好。该方法从给定的整数开始,将其传递给isPrime,如果它是prime,isPrime将返回true。然后将要打印的新(下一个)素数交给用户。如果isPrime为false,则i递增,我们检查下一个整数。

  • 此方法重复读取命令并执行它们,直到游戏结束。完成的变量为true时,表示玩家/用户点击了退出并想要结束游戏——从而退出循环并执行到方法结束。 但我观察到循环有一种奇怪的行为。它循环得非常好(省略以下行时显示stopWatch.getTime()的连续计数: 但是当我把它们放回去时,它会停止显示秒表的连续递增时间,因为它会朝着时间限制增加(在这一点上,它应该停止)。即使玩家没有输入任何命令或输入。

  • 将循环转换为时遇到问题。 方法返回 我尝试过,但需要等待将转换为并且我无法添加它。 我正在尝试下载大约15个报告异步,以等待所有的已经下载,然后将它们合并成一个PDF。 注意:我使用的是框架4.8.3

  • 问题内容: 是否每个递归函数都有一个等效的for循环?(两者都达到相同的结果)。 我有这个递归函数: 假设单词是Set [],并且单词[i] =单词长度为i的集合。 我想做的是:使用一个单词(例如,“ stackoverflow”,没有空格)启动递归,我试图查找该单词是否可以切成子单词(“ stack”,“ over”,“ flow”) ..子词的最小长度为3,并且假设长度为i的子词在Set wo

  • 问题内容: 假设我有这个: 问题: break语句会将我带出两个循环还是仅从内部循环带出?谢谢。 问题答案: 在您的示例中,break语句将使您退出while(b)循环