任何想法如何对2d字符串数组执行修剪操作,例如3x3使用Java流API并收集一个返回相同尺寸的3x3数组?
重点是避免使用显式的for循环
当前的解决方案是简单地执行一个for循环,如:
String arr[][] = {{" word "," word "},{" word "," word "},{" word "," word "}};
for(int i=0; i<arr.length; i++){
for(int j=0; j<arr[i].length; j++){
arr[i][j] = arr[i][j].trim();
}
}
我认为您的迭代解决方案没有任何问题。实际上,在我看来,迭代解决方案对于许多程序员而言都非常容易理解。 stream API具有足够的通用性,几乎可以使用流执行任何计算,但这仅仅是因为您并不意味着应该这样做。但是,既然您已经问过了,这就是流的对应部分。
String[][] result = Arrays.stream(arr)
.map(a -> Arrays.stream(a).map(String::trim).toArray(String[]::new))
.toArray(String[][]::new);
请先决定是要创建具有相同尺寸的new 2D数组,还是要将修剪后的字符串存储回existing数组中。两者都是可能的,而且都不是很难做到的(当您现在如何)。
您在问题中的代码将修剪后的字符串存储回现有数组中。如果您希望这样做并且不想使用循环,那么我建议您也不要使用流,而是List.replaceAll()
:
String arr[][] = {{" word "," word "},{" word "," word "},{" word "," word "}};
Arrays.asList(arr).forEach(inner -> Arrays.asList(inner).replaceAll(String::trim));
System.out.println(Arrays.deepToString(arr));
此代码段的输出是:
[[[单词,单词],[单词,单词],[单词,单词]]
Arrays.asList()
使您的数组成为列表视图。对列表所做的更改将写回到数组中,这就是我们想要的。