通过使用java 8流对集合进行排序,将集合转换为Map

时间:2015-04-18 18:20:19

标签: java collections java-8 linkedhashmap

我有一个列表,我需要自定义排序,然后转换为具有Id与名称映射的地图。

这是我的代码:

Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));

我认为这会完成这项工作,但我想知道我是否可以避免在这里创建LinkedHashMap并使用花哨的函数编程来完成一行中的工作。

2 个答案:

答案 0 :(得分:43)

为此目的,你有Collectors.toMap

Map<Long, String> map = 
    list.stream()
        .sorted(Comparator.comparing(Building::getName))
        .collect(Collectors.toMap(Building::getId,Building::getName));

如果要强制实例化将要实例化的Map实现,请使用:

Map<Long, String> map = 
    list.stream()
        .sorted(Comparator.comparing(Building::getName))
        .collect(Collectors.toMap(Building::getId,
                                  Building::getName,
                                  (v1,v2)->v1,
                                  LinkedHashMap::new));

答案 1 :(得分:0)

使用toMap()

java.util.stream.Collectors