增强型for循环快捷方式

4
以下版本的for循环是否可行(或其中一种变体是否能够实现缩短代码的目的)?
for(String string: stringArray; string.toLowerCase()){
//stuff
 }

替代

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

 }

这可能是一个愚蠢的问题,但当它适用于循环的每个元素时,那一行代码需要反复写入,实在是很烦人。


1
不,第一个示例的语法不正确。我建议你尝试编译它。你应该会得到一个编译器错误。 - Code-Apprentice
@Code-Guru 我知道啊 ;) 我在找类似的东西。 - arynaq
1
你说的“all the time”是什么意思?你只需要输入那一行代码一次。 - Code-Apprentice
如果您需要多次循环遍历数组,建议先创建一个新的数组,将其中所有字符串转换为小写字母,然后再对新数组中的元素进行遍历。 - Code-Apprentice
每次我使用增强型for循环时,在执行其他操作之前,我都必须对循环中的每个对象进行某些处理。这只是我在使用循环时的一个小怪癖,正是这些小技巧和提示让编程变得有趣。 - arynaq
显示剩余3条评论
5个回答

5

写成这样

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

这同样很简短。在普通的for循环中 for(int i=0;i<40;i++),你可以使用逗号运算符将所有内容都放在一行上。


除了这个没有做任何事情。'toLowerCase()'的结果被忽略了。 - Erik Pragt
3
这并不是吹毛求疵,因为现在的代码与之前完全一样,只少了一个新行,而这会让我觉得代码变得不太易读。 - ChiefTwoPencils
1
不是在争论这个问题,但那正是他要求的,把代码放在一行上,所以我就按照他的要求做了。 - aaronman
谢谢,看到了。我同意我的回答没有什么特别之处,但我绝对没有提供错误信息或发布任何本质上不正确的内容。 - aaronman
这实际上是最短的答案,尽管我很遗憾发现我想要的不在JavaSE中。 - arynaq
显示剩余2条评论

0

很遗憾,这是不可能的。您可以查看Google Guava,它有类似于此(谓词/闭包)的东西,但对改进您的代码没有太大帮助。

完全离题也许,但如果您使用与Java完全兼容的Groovy,它会像这样:

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

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

这将会打印出:

  • lower
  • case

但是,就像我所说的,这可能不是您的情况下可行的选项。


0

没有。

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

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


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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接