当前位置: 首页 > 知识库问答 >
问题:

如何将POJO的列表转换为Java流中的MAP?

彭建业
2023-03-14

我想用Java8Stream API将一个Java POJO列表转换为一个非静态方法中的映射。

我的折线图需要x轴的日期字符串值列表和Y轴的数值列表。这是一种典型的地图格式。但我的数据库为我返回了一个POJO列表。我不喜欢在没有Java8流API的帮助下进行循环。我尝试了这个[ask}(Java 8 List of Objects to map of values)中的方法。但是,我面临两个问题。第一,我的POJO MoreCustomDTO除了String之外还包含整数。第二,当我尝试使用方法引用时,想法抱怨非静态方法不能从静态上下文引用。

POJO:

@Data
MoreCustomDTO {
    private String date;
    private Integer money;
}

DAO查询方式:

public List<MoreCustomDTO > getMoreCustomCount(@Param("format") String format, @Param("startTime") String startTime, @Param("endTime") String endTime);
List<MoreCustomCountDTO> customList = customDao.getMoreCustomCount(SqlUtils.DATE_TYPE_FORMAT[Integer.valueOf(type)],startTime,endTime);
Map<String, List> map = new HashMap();
List<String> dateList = new ArrayList<>();
List<Integer> moneyList = new ArrayList<>();
for (MoreCustomCountDTO data : customList) {
    dates.add(data.getDate());
    dailyAmounts.add(data.getMoney());
}
map.put("date", dateList);
map.put("money", moneyList);

故障代码段:

Map<String,List> map =
                    customList.stream()
                            .flatMap(element -> {
                                Map<String,String> um = new HashMap<>();
                                um.put("date",element.getDate());
                                um.put("money",element.getMoney());
                                return um.entrySet().stream();
                            })
                            .collect(Collectors.groupingBy(Map.Entry::getKey,
                                    Collectors.mapping(Map.Entry::getValue,
                                            Collectors.toList())));

我从数据库里得到一份名单。它是JSON FORAMT中的对象数组。

答复:

{
  "rows": [
    {
      "date": "2019-09-01",
      "money": 0.00
    },
    {
      "date": "2019-09-02",
      "money": 0.00
    }
  ]
}

但我想要一个(键)对多(值)的映射格式。

答复:

{
  "map": {
    "date": [
      "2019-09-01",
      "2019-09-02"
    ],
    "money": [
      0.00,
      0.00
    ]
  }
}

共有1个答案

邹俊拔
2023-03-14

老实说,我觉得你最初的解决方案还可以。有时强迫一个解决方案使用该语言最花哨的特性来实现,最终导致代码不太清晰,这总是一件坏事。

话虽如此,我想你想做的是:

Map<Object, Object> map = Stream.of(
    new SimpleEntry<>(
      "date",
      customList.stream().map(MoreCustomDTO::getDate).collect(Collectors.toList())
    ),
    new SimpleEntry<>(
      "money",
      customList.stream().map(MoreCustomDTO::getMoney).collect(Collectors.toList())
    )
  ).collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue));

 类似资料:
  • 我有一个lambda表达式,我想在其中创建一个对象列表,但我得到了错误 错误 我希望作为lambda表达式的返回类型。我怎样才能做到呢?

  • 问题内容: 在Java中,如何获取作为a返回的值? 问题答案:

  • 问题内容: 我必须将我们的j2ee应用程序与REST Web服务集成在一起。我想使用JBoss的RestEasy JAX- RS实现。Web服务返回JSON格式的数组。我有这段代码: 我可以将此“响应”对象映射到使用RestEasy吗?谢谢 问题答案: 如果您的JSON提供程序能够转换为适当的实体,那么可以。您在代码中调用的方法具有重载的版本,该版本接受将结果转换为的实体类。由于序列化某些集合的实

  • 在我的Spring Boot项目中,我有两个类(实体和模型) 在模型中有一个列表 :

  • 问题内容: 如何转换 这是例子 有没有简单的方法可以做到这一点?什么库在这里有用? 谢谢。 问题答案: 也许http://dozer.sourceforge.net可以为您提供帮助。它是可通过xml配置的映射库。 我很快尝试了这个: 我的mappings.xml看起来像这样: 不幸的是,它仅将10映射到所有三个PojoObject属性。也许您可以看到错误并使用代码段。也许这是Dozer中的一个错误

  • 问题内容: 现在,我想创建一个新列表,其中包含中的所有值。这里的结果应该包含 问题答案: 使用以下方法尝试: