JAVA:使用 lambda 处理数组项时如何减少代码大小

SOU*_*E77 1 java arrays lambda

我必须按字母顺序对数组中的每个项目进行排序

输入: [bcdef、dbaqc、abcde、omadd、bbbbb] 输出: [bcdef、abcdq、abcde、addmo、bbbbb]

我写了下面的代码,但我觉得它很冗长(长)。

您能告诉我另一种方式,用更短的代码吗?

谢谢。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import static java.lang.String.copyValueOf;

public class Main {

    public static void main(String[] args) {
        String[] stringsArray = { "bcdef", "dbaqc", "abcde", "omadd", "bbbbb"};

        System.out.println(Arrays.toString(stringsArray));

        List<String> list = Arrays.stream(stringsArray).map((String s)->{
            char[] charArray = s.toCharArray();
            Arrays.sort(charArray);
            return copyValueOf(charArray);
        }).collect(Collectors.toList());
        ArrayList<String> arrayList = new ArrayList<String>(list);
        stringsArray = Arrays.copyOf(arrayList.toArray(),arrayList.size(),String[].class);

        System.out.println(Arrays.toString(stringsArray));
    }

}
Run Code Online (Sandbox Code Playgroud)

Did*_*r L 5

如果您想就地修改原始数组,那么您可以依赖Arrays.asList(),它会List在数组周围创建一个包装器:

Arrays.asList(stringsArray)
        .replaceAll(s -> {
            char[] chars = s.toCharArray();
            Arrays.sort(chars);
            return new String(chars);
        });

System.out.println(Arrays.toString(stringsArray));
Run Code Online (Sandbox Code Playgroud)

Arrays.asList()实际上只是原始数组的视图。对返回列表的任何更改实际上都会在数组上完成,反之亦然。这也是您无法在返回列表上添加/删除元素的原因。