通过使用java 8流对集合进行排序,将集合转换为Map
我有一个列表,我需要先自定义它,然后将其转换为一个地图与它的Id vs name map。 这是代码,但是—
Map map = new LinkedHashMap(); list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));
我认为这将完成这项工作,但我想知道我是否可以避免在这里创建链接哈希映射,就像花哨的函数编程在一行中完成工作一样?
你有这个目的的Collectors.toMap
:
Map map = list.stream() .sorted(Comparator.comparing(Building::getName)) .collect(Collectors.toMap(Building::getId,Building::getName));
如果要强制实例化将要实例化的Map实现,请使用以下命令:
Map map = list.stream() .sorted(Comparator.comparing(Building::getName)) .collect(Collectors.toMap(Building::getId, Building::getName, (v1,v2)->v1, LinkedHashMap::new));
使用java.util.stream.Collectors
toMap()