【问题标题】:Mapping map to a list of objects which contains a name and a value parameter将映射映射到包含名称和值参数的对象列表
【发布时间】:2020-08-10 02:06:57
【问题描述】:

我需要将 Map 映射到 Object 列表(具有参数 'name' 和 'value')。

我尝试过的:

  • 创建 2 个字符串列表,一个用于名称,另一个用于值。然后迭代一个对象列表并将键列表分配给“名称”参数,将值列表分配给“值”参数。这行得通,但是非常凌乱并且看起来很丑陋。

我的问题是,有没有办法使用 Mapstruct 简洁地表达相同的逻辑,或者如果没有,Java 8?

【问题讨论】:

  • 没有看到您的代码(您应该已将其粘贴到文本中并使用“{}”工具格式化)我只能提出建议。我希望您不要尝试将“名称”和“值”参数放入 Object 的实例中,而是创建一个包含这些字段的子类。

标签: java dictionary java-8 mapstruct


【解决方案1】:

试试这个:它假定你有一个构造函数。

class MyObject {
   String name;
   String value;
   public MyObject(String name, String value) {
      this.name = name;
      this.value = value;
   }
}

List<MyObject> objectList = map.entrySet().stream()
   .map(e->new MyObject(e.getKey(),e.getValue())).collect(Collectors.toList());

【讨论】:

  • 嘿!感谢您的回答。我想我的措辞不是很清楚。我有一个 Map 和一个具有“名称”和“值”参数的 POJO(两者都是字符串)。现在,我需要将地图映射到 Object. 的列表
  • 你想要反过来吗?对象列表?
  • 编辑了我的评论,错误地发表了不完整的评论。但是,是的,我需要一个对象列表
  • @Zer0,添加你在问题中添加代码sn-p。
【解决方案2】:

假设您有一个名称和值的映射

Map<String, String> params;

您可以使用map() 将您的地图条目转换为将存储在列表中的新创建的对象。

HashMap<String, String> params = new HashMap<>();
        params.put("param1", "value1");
        params.put("param2", "value2");
        List<MyObject> list = params.entrySet().stream().map((entry) -> new MyObject(entry.getKey(), entry.getValue())).collect(Collectors.toList());
        list.forEach((myObject -> System.out.println(myObject)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    相关资源
    最近更新 更多