为了账号安全,请及时绑定邮箱和手机立即绑定

序列化为日期时间、对象

序列化为日期时间、对象

皈依舞 2023-02-23 17:06:08
我有这种格式的地图,HashMap<String, Object> map = {"RequestsServed":{"2019-06-28T00:00:00Z":0.0},"PullRequests":{"2019-06-28T00:00:00Z":0.0}}我的意图是做map.get("RequestsServed")并获得一张地图, {"2019-06-28T00:00:00Z":0.0}而不管其中的键值对的数量。我尝试使用,HashMap<DateTime, Object> result = new ObjectMapper().readValue(SerializationUtils.toJson(map.get("RequestsServed").toString()), HashMap.class);并失败了。请帮忙。谢谢
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

我问这个问题太蠢了。。。

map.get("RequestsServed") 会给我一个 LinkedTreeMap。我只需要将它解析为我选择的 HashMap 即可。

将 map.get("RequestsServed") 序列化为 json 并将结果值解析为 HashMap 将轻松为我提供所需的结果。

谢谢大家的宝贵时间。


查看完整回答
反对 回复 2023-02-23
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

我写了一个虚拟类用于测试目的:


public class TempObject {

    private String date;

    private Double value;


    public TempObject(String date, Double value) {

        this.date = date;

        this.value = value;

    }


    public String getDate() {

        return date;

    }


    public Double getValue() {

        return value;

    }

}

这是您的解决方案:


// Initializing the Map (I'm using LinkedHashMap here for a reason)

Map<String, Object> map = new LinkedHashMap<>();

map.put("RequestsServed", new TempObject("2019-06-28T00:00:00Z", 0.0));

map.put("PullRequests", new TempObject("2019-06-28T00:00:00Z", 0.1));


// Using Collectors.toMap() with mergeFunction (to handle duplicate keys)

Map<String, Object> result = map.values().stream().map(object -> (TempObject) object).collect(Collectors.toMap(TempObject::getDate, TempObject::getValue, (existingValue, newValue) -> newValue));


System.out.println(result); // printing the value of result map: {2019-06-28T00:00:00Z=0.1}

您还可以将此 String 值解析为LocalDateTime.


查看完整回答
反对 回复 2023-02-23
  • 2 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号