4

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

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

代替

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

 }

可能看起来是一个愚蠢的问题,但是当它适用于循环的每个元素时,一直写下去很烦人。

4

5 回答 5

5

像这样写

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

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

于 2013-05-11T19:29:04.060 回答
0

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

可能完全偏离主题,但它可能会有所帮助,如果您使用与 Java 完全兼容的 Groovy,它将类似于:

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

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

哪个会打印:

  • 降低
  • 案子

但是,就像我说的那样,在您的情况下,这可能不是一个可行的选择。

于 2013-05-11T19:29:26.947 回答
0

不,没有。

增强 for 循环的诀窍在于它的行为与集合上的任何其他循环一样 - 您一次处理一个单独的元素,而不是一次处理所有元素。

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

于 2013-05-11T19:31:52.440 回答
0

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

于 2013-05-11T19:35:37.227 回答
0

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

于 2013-05-11T19:39:30.097 回答