【问题标题】:How can this for loop that loops this array be turned into a one liner?这个循环这个数组的for循环怎么能变成一个单行呢?
【发布时间】:2023-01-04 16:56:18
【问题描述】:

你们知道如何简化或将这段代码变成单行代码并忽略库吗 只是代码本身

for (int i = 0; i <= 8; i += 1) {
    inventory.SpellMenu.setItem(slots.get(i), (ItemStack) inventory.ItemQueue.toArray()[i]);
}

【问题讨论】:

  • 我的 Java 生锈了,但我相信可以将其压缩为一行
  • 你的意思是删除空格不像我的意思是使用流或其他形式的简化。有一种方法可以用流来做到这一点只是不知道如何
  • 我无法回答,但您确实问过如何将代码变成单行代码。删除换行符,它应该仍然像写的那样工作。通常,您可以采用大多数多行代码并将换行符替换为分号以告诉 Java 语句已完成。
  • 您通常可以使用 IntStream.rangeClose(0, 8).forEach(i -&gt; /* whatever is done in the for loop */); 之类的东西将 for 循环转换为 Stream - 但这并不是真的更好(或者最终是这样?)
  • 你刚刚回答了我的问题哈哈

标签: java


【解决方案1】:

据我所知,您的代码是 for 循环中的一行。对于更清晰的代码,建议一行的最大长度为 70-80 个字符,这样您可以将 upcast 重新格式化为变量以使其更具可读性。

for (int i = 0; i <= 8; i += 1) {
    ItemStack stack = (ItemStack) inventory.ItemQueue.toArray();
    inventory.SpellMenu.setItem(slots.get(i), stack[i]);
}

在 for 循环中,我没有看到任何减少代码的方法,但是您可以删除括号以防您像以前一样保留代码。

【讨论】:

  • 不,inventory.ItemQueue.toArray() 不是 ItemStack;这是一个数组。 ItemStack 是inventory.ItemQueue.toArray()[i]
  • 它应该是ItemStack[] stack 而不是像 k314159 建议的那样只是 ItemStack
【解决方案2】:

使用IntStream,范围从 1 到 8,然后使用 foreach 做你想做的事

IntStream.rangeClosed(0, 8).forEach(i -> inventory.SpellMenu.setItem(slots.get(i), (ItemStack) inventory.ItemQueue.toArray()[i]));

【讨论】:

  • 更高效?怎么样?创建更多对象并基本上做同样的事情? (更不用说与 rangeClosed(0, ... 对比的“范围从 1 ...”;以前看过该代码...)
猜你喜欢
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
相关资源
最近更新 更多