使用java流更新字符串数组

ata*_*ata 4 arrays string java-8 java-stream

我知道对于object,我们可以为每个集合和更新对象,但对于像Strings这样的不可变对象,我们如何用新对象更新数组而不将其再次转换为数组.

例如,我有一个字符串数组.我想迭代每个字符串并修剪它们.否则我不得不这样做:

Arrays.stream(str).map(c -> c.trim()).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

最后,我会得到一个List而不是我最初给出的String [].它经过了大量的处理.有什么方法可以做类似的事情:

for(int i = 0; i < str.length; i++) {
        str[i] = str[i].trim();
    }
Run Code Online (Sandbox Code Playgroud)

使用java流?

Hol*_*ger 8

流不用于操纵其他数据结构,尤其不用于更新其源.但Java API不仅包含Stream API.

正如Alexis C. 在评论中所示,您可以使用Arrays.setAll(arr, i -> arr[i].trim());

parallelSetAll当你有一个非常大的阵列时,你甚至可以使用它.

但是,它可能更容易使用Arrays.asList(arr).replaceAll(String::trim);.

请记住,返回的包装器Arrays.asList允许通过List接口修改包装的数组.仅支持添加和删除.


Era*_*ran 5

使用toArray

str = Arrays.stream(str).map(c -> c.trim()).toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)

这里的缺点(相对于原始 Java 7 循环)是创建一个新数组来存储结果。

要更新原始数组,您可以用 s 重写循环Stream,但我不确定有什么意义:

IntStream.range (0, str.length).forEach (i -> {str[i] = str[i].trim();});
Run Code Online (Sandbox Code Playgroud)