使用Streams将Map转换为二维数组

3

我试图使用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://dev59.com/lVYN5IYBdhLWcg3wdn8Y#47397601

1个回答

6

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

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

输出:

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

现在是时候修复已经链接的答案,以类似地使用.toArray(Float[][]::new);而不是.toArray(size -> new Float[size][1]);,后者浪费性能,因为它会用被后来覆盖的子数组填充新数组。 - Holger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接