【问题标题】:Convert a list of Object values to a POJO将 Object 值列表转换为 POJO
【发布时间】:2018-03-01 06:05:26
【问题描述】:

您好,我有以下依赖项的返回值。我正在尝试将其转换为我代表它的 POJO。

返回类型结构:

   DependencyAPIResult
     - List<Attribute>

每个属性都有以下类定义:

public class Attribute {

    @NonNull private final AttributeKey key;
    @NonNull private final AttributeValue value;

    Getters
    .
    .
    .
    Setters
    .
    .
    .
}

我想将此结果映射到一个 POJO 表示为:

public class MyPOJO {

    private pojoId;
    private pojoName;
    private pojoValue;
}

我目前将结果转换为 POJO 的方式是这样的:

String pojoId = null;
String pojoName = null;
String pojoValue = null;

for (Attribute attribute : result.getAttributes()) {
    switch (attribute.getKey().getName()) {
    case "pojoId"
        id = attribute.getValue().getStringValue();
        break;
    case "pojoName":
        name = attribute.getValue().getStringValue();
        break;
    case "pojoValue":
        pojoValue = attribute.getValue().getStringValue();
        break;
    default:
        break;
    }
}

是否有类似的方法/映射器或可能是 Java 8 lambda 函数,我可以使用它来使它变得更好?谢谢!

【问题讨论】:

  • 您可以将其收集到 Map (result.getAttributes().stream().collect(toMap(a -&gt; a.getKey().getName(), a -&gt; a.getValue().getStringValue()))),然后使用像 Jackson 这样的反序列化库将其转换为您的 POJO。

标签: java pojo


【解决方案1】:

您可以将它们存储在 Map 中,而不是将 forswitch 一起使用:

Map<String, String> valuesByKeyName = 
result.getAttributes().stream()
                      .collect(Collectors.toMap(k -> k.getKey().getName(), 
                               v -> v.getValue().getStringValue()));

String id = valuesByKeyName.get("pojoId");
String name = valuesByKeyName.get("pojoName");
String pojoValue = valuesByKeyName.get("pojoValue");

Pojo pojo = new Pojo(id, name, pojoValue);

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2016-09-15
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多