【问题标题】:Java 8 groupingBy to obtain LinkedHashMap and mapping the values of the map to a different objectJava 8 groupingBy 获取 LinkedHashMap 并将映射的值映射到不同的对象
【发布时间】:2020-09-04 14:06:09
【问题描述】:

我有这个返回地图的方法:

    public Map<String, List<ResourceManagementDTO>> getAccountsByGroupNameMap(final List<AccountManagement> accountManagementList) {
    
    return new LinkedHashMap<>(accountManagementList.stream().collect(Collectors.groupingBy(acc -> acc.getGroup().getName(),
            Collectors.mapping(ResourceManagementDTOMapper::toResourceManagementDTO, Collectors.toList()))));
}

我需要我的地图是 LinkedHaspMap,但上面的代码似乎不起作用,因为键的顺序没有保留。我设法找到了另一种返回 LinkedHashMap 的方法,但是使用该语法我无法再进行映射操作(将 AccountManagement 映射到 ResourceManagementDTO)。代码如下:

    public Map<String, List<AccountManagement>> getAccountsByGroupNameMap(final List<AccountManagement> accountManagementList) {
    return accountManagementList.stream()
                                 .collect(groupingBy(acc -> acc.getGroup().getName(), LinkedHashMap::new, Collectors.toList()));
}

有没有办法获取 LinkedHashMap 并在单个 Java 8 管道中执行映射操作?我真的想不出一种结合这两种操作的语法。

【问题讨论】:

  • 为什么需要 LinkedHashMap?

标签: java hashmap linkedhashmap groupingby


【解决方案1】:

尝试以下操作:groupingBy 获取地图类型的供应商。

public Map<String, List<ResourceManagementDTO>>
            getAccountsByGroupNameMap(
                    final List<AccountManagement> accountManagementList) {
        
        return accountManagementList.stream()
                .collect(Collectors.groupingBy(
                        acc -> acc.getGroup().getName(),
                        LinkedHashMap::new,
                        Collectors.mapping(
                                ResourceManagementDTOMapper::toResourceManagementDTO,
                                Collectors.toList())));

【讨论】:

  • 谢谢,这行得通。我想我正在尝试做类似的事情,但是我的 IDE 一直在 acc,getGroup() 上显示错误,说它无法解析方法。
  • IDE 的错误消息可能有些含糊。我使用 Eclipse,有时很难弄清楚问题到底是什么。
猜你喜欢
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多