LinkedHashMap如何转对象的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LinkedHashMap如何转对象的问题相关的知识,希望对你有一定的参考价值。
参考技术A 使用Feign调用其他服务的时候,想要将返回数据强转为对象结果发现出现异常:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to ********************
使用Map<String,Object> map = data,然后使用map.get()来获取里面的值。
注意:如果有多个字段的话,不建议使用这样来做,太傻了。
使用阿里的fastJson来将这个linkedHashMap转换成对象。
访问 LinkedHashMap 中最后一个对象中的方法
【中文标题】访问 LinkedHashMap 中最后一个对象中的方法【英文标题】:Accesing a method in the last object in a LinkedHashMap 【发布时间】:2018-10-14 03:44:50 【问题描述】:我有一个 LinkedHashMap,其中包含一个位于 key
的对象和一个位于 value
的对象。
我用过代码
yourShots.keySet().toArray()[yourShots.size()-1]
返回keys
的最后一个对象。但是,我无法访问该对象具有的方法。
我已使用getClass()
方法确定我确实拥有正确的对象类型,但无法调用该方法。我只是得到了找不到方法的错误。
我做错了吗?
【问题讨论】:
你是说你试图调用的方法是在键/值的 value 对象上,而不是 key 对象上Map
?中的对?
你能显示你将结果分配给哪个变量以及 yourShots 的声明吗?
如果知道key,就不需要构造数组
显示更多代码。 yourShots 是如何定义的?也许你需要一个演员......
@Andreas 没有。方法在key
对象中。
【参考方案1】:
toArray
给你通用的Object
类型。在使用它之前,您必须将其转换为您的 key
类。
KeyClass key = (KeyClass) yourShots.keySet().toArray()[yourShots.size()-1];
// Here you can access your desired method
编辑:
正如@rgettman 建议的那样,您可以使用重载版本toArray(T[])
来避免强制转换。在这种情况下,您应该预先提供一个大小为keySet()
的初始化数组。
【讨论】:
或者您可以使用重载Set.toArray(T[])
来避免强制转换。【参考方案2】:
或者,您可以使用Iterator
来避免将所有不需要的键复制到数组中,然后再将其丢弃。由于是通用的,它还节省了演员表。
Key key = null;
for(Iterator<Key> iterator = yourShots.keySet().iterator(); iterator.hasNext();)
key = iterator.next();
【讨论】:
【参考方案3】:编辑:
您可以将keySet
转换为List
,然后获取最后一个对象。
像这样的:
List<Key> keys = new ArrayList(yourShots.keySet());
Key lastKey = keys.get(keys.size() - 1);
原帖 您正在访问错误的方法。
yourShots.keySet()
返回一个包含Map
中所有键的Set
。
要访问地图中的最后一个值,您需要调用:yourShots.values()
希望对你有帮助
【讨论】:
谢谢,但我不想得到最后一个值。我正在尝试获取最后一个密钥。 对不起,我误解了你的问题,让我更新我的答案。以上是关于LinkedHashMap如何转对象的问题的主要内容,如果未能解决你的问题,请参考以下文章
如何将 LinkedHashMap 转换为自定义 java 对象?