【问题标题】:java stream convert list of POJO to Map of Map<String, List<POJO>> [duplicate]java流将POJO列表转换为Map <String,List<POJO>>的Map [重复]
【发布时间】:2020-07-04 09:06:28
【问题描述】:

我有 Foo 类的列表:

public class Foo {
  private Key key;
  private String value;
}
public class Foo.Key {
  private String category;
  private String pref;
  private String platform;
}

需要将其转换为 Map 其中第一个 String 是 Foo.Key.category,第二个 String 是 Foo,Key.pref 和 Lookup 类:

public class Lookup {
  private String platform;
  private String value;
}

目前我有这个代码:

Map<String,Map<String, List<Lookup>> map = Maps.newHashMap();
fooList.forEach(
        f -> {
          String category = f.getKey().getCategory();
          String pref = f.getKey().getPref();
          String platform = f.getKey().getPlatform();
          String value = f.getValue();

          Lookup data =
              Lookup.builder()
                  .platform(platform)
                  .value(value)
                  .build();

          if (map.get(category) == null) {
            map.put(category, new HashMap<>());
          }
          map.get(category).computeIfAbsent(pref, (x -> new ArrayList<>())).add(data);
        });

我尝试使用 Java 流但无法编译:

fooList.stream()
.collect(Collectors.groupingBy(f -> f.getKey().getCategory(), 
            Collectors.groupingBy(f -> f.getKey().getPref(), 
                Collectors.toList(f -> Lookup.Builder.platform(platform).value(value).build()))));  

               

【问题讨论】:

    标签: java java-stream


    【解决方案1】:

    如果您坚持使用流:

    Map<String, Map<String, List<Lookup>>> converted = foos.stream()
        .collect(Collectors.groupingBy(foo -> foo.getKey().getCategory(),
            Collectors.groupingBy(foo -> foo.getKey().getPref(),
                Collectors.mapping(foo -> Lookup.builder().platform(foo.getKey().getPlatform()).value(foo.getValue()).build(),
                    Collectors.toList()
                )
            )
        ));
    

    如您所见,Collectors.mapping 是这里的线索。

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 2021-04-25
      • 2017-03-22
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多