【问题标题】:Map to 2d array with Streams使用 Streams 映射到二维数组
【发布时间】:2018-12-16 19:01:59
【问题描述】:

我正在尝试使用 Streams 创建一个 String 的二维数组:

String[] fruit1DArray;
String[][] fruit2DArray;

Map<String, String> fruitMap = new HashMap<>();
fruitMap.put("apple", "red");
fruitMap.put("pear", "green");
fruitMap.put("orange", "orange");

fruit1DArray = fruitMap.entrySet()
    .stream()
    .map(key -> key.getKey())
    .toArray(size -> new String[size]);

fruit2DArray = fruitMap.entrySet()
    .stream()
    .map(entry-> new String[]{entry.getKey()})
    .toArray(size -> new String[size][1]);

System.out.println(Arrays.deepToString(fruit1DArray));
System.out.println(Arrays.deepToString(fruit2DArray));

输出是:

[orange, apple, pear]
[[orange], [apple], [pear]]

我追求的输出是:

[orange, apple, pear]
[[orange, orange], [apple, red], [pear, green]]

我指的是https://stackoverflow.com/a/47397601/887235

【问题讨论】:

    标签: java arrays dictionary java-stream


    【解决方案1】:

    您忘记从输入 Map 中获取值:

    fruit2DArray = fruitMap.entrySet()
                           .stream()
                           .map(e -> new String[]{e.getKey(),e.getValue()})
                           .toArray(String[][]::new);
    

    输出:

    [[orange, orange], [apple, red], [pear, green]]
    

    【讨论】:

    • 是时候修复the already linked answer 以类似地使用.toArray(Float[][]::new); 而不是.toArray(size -&gt; new Float[size][1]); 这会浪费性能来填充新数组,而子数组随后会被覆盖。
    猜你喜欢
    • 2011-01-10
    • 2016-11-22
    • 2021-05-04
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多