任何想法如何对字符串的二维数组执行修剪操作,例如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();
}
}
答案 0 :(得分:3)
我认为您的迭代解决方案没有任何问题。实际上,在我看来,迭代解决方案对于许多程序员而言都非常容易理解。 Streams API具有足够的通用性,几乎可以使用流执行任何计算,但这仅仅是因为您并不意味着应该这样做。但是,既然您已经问过了,这就是流对应项。
String[][] result = Arrays.stream(arr)
.map(a -> Arrays.stream(a).map(String::trim).toArray(String[]::new))
.toArray(String[][]::new);
答案 1 :(得分:0)
请首先确定是要创建具有相同尺寸的 new 二维数组,还是要将修剪后的字符串存储回 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()
为您的阵列创建列表视图。对列表的更改将写回到数组中,这就是我们想要的。