[英]how to put map values into list with different type?
map<Integer,Object>
List<String>
ArrayList<String>(map.values)
给我一个错误 The constructor ArrayList<String>(Collection<Object>) is undefined
编辑:谢谢。 但是我没有说清楚。 我的对象是类名称为TravelData的类对象,它具有很少的变量,如双精度,日期和字符串。 我处理它们并放入<Integer,TravelData>.
类的地图中<Integer,TravelData>.
然后,我必须将它们放到List<String>
并将它们全部打印出来。 我不能更改列表的类型:(
解决者:重写toString方法
multiLangOffers = new ArrayList<String>();
for (TravelData value : offers.values()) {
multiLangOffers.add(value.toString());
}
谢谢你们 !
根据您使用<Integer, Object>
初始化Map的方式,对Map.values()
的调用将返回Collection<Object>
。 这意味着您必须将ArrayList
初始化为:
List<Object> value = ArrayList<Object>(map.values());
但这将是无用的,因为map.values()
的返回已经是一个集合,并且当您不依赖于Interface List
API部分时,可以坚持使用该集合。
但是您想要一个List<String>
且Map的值为String,那么您必须执行以下操作:
List<String> stringValues = new ArrayList<String>();
for (Object value : map.values()) {
if (value instanceof String) {
stringValues.add((String) value);
}
}
这将所有值迭代为对象,然后检查String上的值的实例类型。 如果是这样,请将值作为String添加到列表中。
因此,使问题变得很奇怪,但要视评论而定。 如果地图正在处理自定义复杂Object而不是Object
。 然后,您必须手动访问该对象的所需String值:
List<String> stringValues = new ArrayList<String>();
for (ComplexObj value : map.values()) {
stringValues.add(value.getDesiredStringValueGetterMethodIfYouUseBeanSyntax());
}
只要任何Collection类型扩展ArrayList的类型,都可以将其作为参数传递给构造函数
但是在这里,您正在做反向操作,因为对象不能以字符串形式传递,因为它不会扩展字符串
你可以做两件事
您可以列出对象列表,所有都可以找到
public class Test { static List<Object> list = new ArrayList<Object>(); static Map<String, Object> map = new HashMap<String, Object>(); public static void main(String args[]) { map.put("1", "test"); list = new ArrayList<Object>(map.values()); System.out.println(list.toString()); } }
您可以使用字符串类型的值制作地图
public class Test { static List<String> list = new ArrayList<String>(); static Map<String, String> map = new HashMap<String, String>(); public static void main(String args[]) { map.put("1", "test"); list = new ArrayList<String>(map.values()); System.out.println(list.toString()); } }
尝试List list = new ArrayList(map.values());
问候
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.