【问题标题】:How to get Stream from an array of array of String?如何从String数组中获取Stream?
【发布时间】:2020-03-07 07:40:12
【问题描述】:

我有以下语句创建一个字符串数组:

String[][] strArr = {{"Jazz","80"},{"sam","90"},{"shaam","80"},{"aditya","100"}};

是否有可能获得如下流?我在 Eclipse 中尝试过,但出现错误。

Stream<String,String> streamObj = Arrays.stream(strArr);

试图在网上搜索,但大多数结果显示从一维字符串数组中获取流,如下所示:

String[] stringArr = {"a","b","c","d"};
Stream<String> str = Arrays.stream(stringArr);

【问题讨论】:

  • Arrays.stream(strArr).flatMap(Arrays::stream)

标签: java string multidimensional-array java-8 java-stream


【解决方案1】:

没有诸如Stream&lt;String, String&gt;java.util.stream.Stream 类的可行表示,因为它的泛型实现依赖于单一类型,例如它声明的类型:

public interface Stream<T> ...

您可能仍将collect 子数组中的映射作为Map&lt;String, String&gt; 中的键值对作为:

Map<String, String> map = Arrays.stream(strArr)
        .collect(Collectors.toMap(s -> s[0], s -> s[1]));

要进一步包装条目而不将它们收集到 Map,您可以创建 StreamSimpleEntry 为:

Stream<AbstractMap.SimpleEntry<String, String>> entryStream = Arrays.stream(strArr)
        .map(sub -> new AbstractMap.SimpleEntry<>(sub[0], sub[1]));

【讨论】:

    【解决方案2】:

    您可以定义一个名为 StringPair 的 POJO 并映射流。

    public class PairStream {
    
        public static void main(String[] args) {
            String[][] strArr = {{"Jazz","80"},{"sam","90"},{"shaam","80"},{"aditya","100"}};
            Arrays.stream( strArr ).map( arr -> new StringPair(arr) ).forEach( pair -> System.out.println(pair) );
        }
    
        private static class StringPair {
            private final String first;
            private final String second;
    
            public StringPair(String[] array) {
                this.first = array[0];
                this.second = array[1];
            }
            @Override
            public String toString() {
                return "StringPair [first=" + first + ", second=" + second + "]";
            }
        }
    }
    

    你也可以使用Apache Commons lang Pair

    public class PairStream {
    
        public static void main(String[] args) {
            String[][] strArr = {{"Jazz","80"},{"sam","90"},{"shaam","80"},{"aditya","100"}};
            Arrays.stream( strArr ).map( arr -> Pair.of(arr[0],arr[1]) ).forEach( pair -> System.out.println(pair) );
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 2023-03-31
      • 2023-03-26
      • 2021-11-13
      • 2015-01-06
      相关资源
      最近更新 更多