为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Streams 将对象列表转换为映射

使用 Streams 将对象列表转换为映射

神不在的星期二 2023-08-09 15:32:20
我有一个 A 类对象列表:List<A> list;class A {    String name;    String lastname;    //Getter and Setter methods}我想将此列表转换为从名称到一组姓氏的映射:Map<String, Set<String>> map;例如,对于以下列表:约翰·阿彻、约翰·阿盖特、汤姆·凯南宁、汤姆·巴伦、辛迪·金地图将是:约翰 -> {阿切尔、玛瑙}、汤姆 -> {凯纳宁、贫瘠}、辛迪 -> {国王}我尝试了以下代码,但它返回从名称到 A 类对象的映射:list.stream.collect(groupingBy(A::getFirstName, toSet()));
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

Map< String, Set<String>> map = list.stream()

                                    .collect(

                                        Collectors.groupingBy(

                                              A::getFirstName, Collectors.mapping(

                                                    A::getLastName, Collectors.toSet())));

您走在正确的轨道上,您需要使用:

  • Collectors.groupingBy按 进行分组firstName

  • 然后使用下游收集器作为 的Collectors.mappping第二个参数Collectors.groupingBy来映射到lastName.

  • 然后最后Set<String>通过调用将其收集到 a 中Collectors.toSet



查看完整回答
反对 回复 2023-08-09
?
PIPIONE

TA贡献1829条经验 获得超9个赞

你从来没有告诉收集者提取姓氏。


我想你需要类似的东西


list.stream

  .collect(groupingBy(

    A::getFirstName, // The key is extracted.

    mapping(  // Map the stream of grouped values.

      A::getLastName, // Extract last names.

      toSet()  // Collect them into a set.

)));


查看完整回答
反对 回复 2023-08-09
  • 2 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信