将List <students>转换为Map <k,list <v =“”>&gt;

时间:2017-06-19 16:20:37

标签: java java-8

我的学生班只有三个属性 - 年龄,性别和姓名。 我有一个类似Map<String, Student>的Map,其中key是一个UUID字符串,充当学生的标识符。

现在我想将此地图转换为另一种模式地图 - Map<String,List<String>>。在此地图中,密钥可以是学生的性别,价值将是与该性别对应的UUID列表。

我可以使用pre-Java8语法实现这一点,但我试图通过Java8流API和lambda表达式来实现。请帮助解决这个问题。

我尝试了什么 - Map<String, Student> map; map.entrySet().stream().collect(e -> e.getValue().getSex(), ???how to get list of keys here???)

我可以正确设置目标地图的键,但我很难设置值。

1 个答案:

答案 0 :(得分:3)

map.entrySet().stream()
            .collect(Collectors.groupingBy(entry -> entry.getValue().getSex(),
                    Collectors.mapping(entry -> entry.getKey(), Collectors.toList())));