【问题标题】:How to convert an array to another array?如何将一个数组转换为另一个数组?
【发布时间】:2022-06-17 19:51:41
【问题描述】:

我正在将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
}

除此之外还有更优雅的解决方案(例如使用集合/流)吗?

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

【问题讨论】:

  • List.of(arystrs).stream().map(str -&gt; new MyString(str)).collect(Collectors.toList()); 这将返回列表可能存在一些语法问题,因为它只是在没有任何 ide 的情况下键入。如果需要,对于转换后的列表,还有一个 .toArray() 用于数组转换。
  • @MahadevK 你可以这样回答

标签: java arrays collections


【解决方案1】:

类::

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() 将数组转换为流,映射以创建 MyString 类的对象并转换为数组。

【讨论】:

    【解决方案2】:

    您可以使用流:

    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);
    

    【讨论】:

      【解决方案3】:
      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.
      **/
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 1970-01-01
        • 2020-05-24
        • 2018-11-27
        • 2021-12-13
        相关资源
        最近更新 更多