如何将一个数组转换为另一个数组?

How to vonvert an array to another array?

我正在将 Strings 的数组转换为 MyStrings 的数组。

String[] arystrs = { "abc", "xyz" };
MyString[] arymystrs = new MyString[this.arystrs.length];

for (int i = 0; i < arystrs.length; i++) {
    arymystrs[i] = new MyString(arystrs[i]);  // convert by constructor
}

除此之外还有更优雅的解决方案(例如 collections/streams)吗?

我知道 stream/map/collect 正在处理集合(列表、地图),但不确定它如何处理数组。

Class::

class MyString {
    private String string;
    public MyString(String string) {
        this.string = string;
    }
}

一行使用流,

MyString[] objects = Arrays.stream(arystrs).map(MyString::new).toArray(MyString[]::new);

使用 Arrays.stream() 将数组转换为流,映射以创建 class MyString 的对象并转换为数组。

var myStrings = List.of(arystrs).stream().map(str -> new MyString(str)).collect(Collectors.toList());
/**
*Converts array to list and then stream over. Map each element to MyString. Collect that back to list.
**/

这将 return 列出可能存在一些语法问题,因为它只是键入而没有任何 ide。如果需要,对于转换后的列表,还有一个 .toArray() 用于数组转换。

MyString[] myStringsArray = myStrings.toArray(MyString[]::new);

您可以使用流:

class MyString {

    private final String str;

    public MyString(String str) {
        this.str = str;
    }

}

String[] arystrs = { "abc", "xyz" };
MyString[] arymystrs = Arrays.stream(arystrs).map(MyString::new).toArray(MyString[]::new);