【问题标题】:Enhanced for loop shortcut增强的 for 循环快捷方式
【发布时间】:2013-05-06 05:43:48
【问题描述】:

以下版本的 for 循环 是否可行(或者它的变体实现了用一行缩短代码的目的)?

for(String string: stringArray; string.toLowerCase()){
//stuff
 }

代替

for(String string: stringArray){
  string = string.toLowerCase();
  //stuff

 }

这似乎是一个愚蠢的问题,但是当它适用于循环的每个元素时,始终编写一行是令人厌烦的。

【问题讨论】:

  • 不,第一个例子的语法不正确。我建议你尝试编译它。你应该得到一个编译器错误。
  • 不,直接使用 Java 是不可能的。
  • @Code-Guru 我知道 ;) 正在寻找类似的东西。
  • “一直”是什么意思?您只需键入该行一次。
  • 如果你循环遍历数组多次,你应该简单地创建 another 数组,所有的字符串都是小写的,然后循环遍历新数组中的元素。跨度>

标签: java arrays for-loop


【解决方案1】:

这样写

for(String string: stringArray)string=string.toLowerCase();

这很短。同样在正常的 for 循环 for(int i=0;i<40;i++) 中,您可以使用逗号运算符将所有内容保持在一行

【讨论】:

  • 除了这没有任何作用。 'toLowerCase()' 的结果被忽略。
  • 好吧,这并不挑剔,因为现在这正是他之前所拥有的减去一个新行,IMO 使代码的可读性降低。
  • 不争辩,但这正是他要求的,将代码放在一行上,所以这正是我所做的
  • 他的问题字面意思是“为了将其缩短为一行”
  • 可以,但条件是不使用string = ...。我将收回我的 -1 用于您的逻辑论证。也许你应该再读一遍第一句话。他实际上是在要求for 循环的变体。
【解决方案2】:

很遗憾,这是不可能的。你可以看看Google Guava,它有这样的东西(谓词/闭包),但它对改进你的代码没有多大帮助。

也许完全偏离主题,但它可能会有所帮助,如果您使用与 Java 完全兼容的 Groovy,它会是这样的:

String[] stringArray = ["Lower", "Case"] as String[]

stringArray.collect { it.toLowerCase() }.each { item ->
    println item
}

哪个会打印:

  • 降低
  • 案例

但是,就像我说的,这对你来说可能不是一个可行的选择。

【讨论】:

    【解决方案3】:

    不,没有。

    增强型 for 循环的技巧在于它的行为类似于集合中的任何其他循环 - 您正在处理单个元素一次一个,而不是一次处理所有元素。

    此外,由于toLowerCase() 返回一个新的String,它应该只在绝对需要它的情况下调用,而不是为此创建一个新变量(除非您在更多地方需要它,在这种情况下,最好将小写功能移动到这些方法中)。

    【讨论】:

      【解决方案4】:

      您应该考虑将代码重构为几个方法,每个方法都有自己的循环。一种方法是使用原始列表中的转换元素创建一个新数组(或列表)(例如将 toLowerCase() 应用于数组中的字符串)。其他方法处理新数组而不是原始数组。

      【讨论】:

        【解决方案5】:

        我认为目前还不可能。 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-23
          • 2020-10-03
          • 2011-01-20
          • 1970-01-01
          • 1970-01-01
          • 2012-08-22
          相关资源
          最近更新 更多