代码之家  ›  专栏  ›  技术社区  ›  becks

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

  •  2
  • becks  · 技术社区  · 6 年前

    我想皈依 Map<Integer, String> List<String> 将列表中的每个映射条目-映射到1个条目作为“键值”

    我搜索了一下,只找到了将值映射到列表的方法。

    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..但我想知道让它通过溪流是否可行

    3 回复  |  直到 6 年前
        1
  •  2
  •   Pankaj Singhal    6 年前
        List<String> list = map.entrySet()
                                .stream()
                                .map(entry -> entry.getKey() + "-" + entry.getValue())
                                .sorted()
                                .collect(Collectors.toList());
    
        2
  •  1
  •   Ousmane D.    6 年前

    只是和其他答案略有不同。如果插入/迭代顺序很重要,那么我宁愿使用 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
  •  1
  •   Ousmane D.    6 年前

    这里有一个变体使用.map从一个列表移动到另一个映射

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