是否可以使用以下版本的for 循环(或实现用一行缩短代码的目的的变体)?
for(String string: stringArray; string.toLowerCase()){
//stuff
}
代替
for(String string: stringArray){
string = string.toLowerCase();
//stuff
}
可能看起来是一个愚蠢的问题,但是当它适用于循环的每个元素时,一直写下去很烦人。
像这样写
for(String string: stringArray)string=string.toLowerCase();
这同样简短。同样在正常的 for 循环中for(int i=0;i<40;i++)
,您可以使用逗号运算符将所有内容保持在一行
不幸的是,这是不可能的。你可以看看Google Guava,它有类似这样的东西(谓词/闭包),但它对改进你的代码没有多大帮助。
可能完全偏离主题,但它可能会有所帮助,如果您使用与 Java 完全兼容的 Groovy,它将类似于:
String[] stringArray = ["Lower", "Case"] as String[]
stringArray.collect { it.toLowerCase() }.each { item ->
println item
}
哪个会打印:
但是,就像我说的那样,在您的情况下,这可能不是一个可行的选择。
不,没有。
增强 for 循环的诀窍在于它的行为与集合上的任何其他循环一样 - 您一次处理一个单独的元素,而不是一次处理所有元素。
此外,由于它应该toLowerCase()
返回一个 new String
,它应该只在绝对需要它的情况下调用,而不是为此创建一个新变量(除非你在更多地方需要它,在这种情况下,最好将它移到较低的位置-case 功能到这些方法中)。
您应该考虑将代码重构为几个方法,每个方法都有自己的循环。一种方法是使用原始列表中的转换元素创建一个新数组(或列表)(例如将 toLowerCase() 应用于数组中的字符串)。其他方法处理新数组而不是原始数组。
我认为目前还不可能。:)