将映射转换为list <string>-作为每个列表项的“键值”

时间:2018-07-14 17:08:10

标签: java java-8 java-stream

我想将Map<Integer, String>转换为List<String> 每个地图条目-列表中的1个条目作为“键-值”

我搜索了,只发现只将值映射到List。

Map<Integer, String> map = new HashMap<>();
    map.put(10, "apple");
    map.put(20, "orange");
    map.put(30, "banana");
    map.put(40, "watermelon");
    map.put(50, "dragonfruit");

我希望将其映射为列表

 "10-apple" 
 "20-orange"

以此类推。

如果我使用foreach ..可以很容易地做到这一点,但是我想知道通过流获取它是否可行

4 个答案:

答案 0 :(得分:2)

    List<String> list = map.entrySet()
                            .stream()
                            .map(entry -> entry.getKey() + "-" + entry.getValue())
                            .sorted()
                            .collect(Collectors.toList());

答案 1 :(得分:1)

这是使用.map从列表移动到地图的一种变体

List<String> list = map.entrySet()
                       .stream()
                       .map(x -> String.format("%d-%s", x.getKey().intValue(), x.getValue()))
                       .sorted().collect(Collectors.toList());

答案 2 :(得分:1)

与其他答案稍有不同。如果插入/迭代顺序很重要,那么我宁愿首先使用LinkedHashMap而不是使用HashMap然后对它进行排序,但这实际上并不总是可以保证。

示例:

Map<Integer, String> map = new LinkedHashMap<>();
...
...
...

然后在entrySet上流式传输并收集到列表实现:

List<String> list = map.entrySet()
                        .stream()
                        .map(e -> e.getKey() + "-" + e.getValue())
                        .collect(Collectors.toList());

答案 3 :(得分:-2)

如果你只想要 Map 的值,试试这个

List<String> list = new ArrayList<>(map.values())

{"苹果", "橙色"}