map<Integer,Object>
List<String>
ArrayList<String>(map.values)
给我一个错误The constructor ArrayList<String>(Collection<Object>) is undefined
编辑:
谢谢。但我没有说清楚。我的对象是类对象名称TravelData,它具有很少的变量,如双精度数,日期和字符串。我处理它们并放入像<Integer,TravelData>.
这样的地图然后我必须把它们放到List<String>
并打印出来。我无法更改列表类型:(
解决方法:覆盖toString方法
multiLangOffers = new ArrayList<String>();
for (TravelData value : offers.values()) {
multiLangOffers.add(value.toString());
}
谢谢大家!
答案 0 :(得分:3)
根据您使用<Integer, Object>
初始化地图的情况,对[{1}}的调用将返回Map.values()
。
这意味着您必须将Collection<Object>
初始化为:
ArrayList
但这没用,因为List<Object> value = ArrayList<Object>(map.values());
的返回已经是一个集合,当你不依赖于接口map.values()
的API部分时,你可以坚持下去。
但是你想要一个List
,其中Map的值是String,那么你必须做这样的事情:
List<String>
这将迭代所有值作为对象,然后检查String上的实例类型值。如果是这样,请将值作为String添加到List。
因此,问题很奇怪,但取决于评论。
如果地图正在处理自定义复杂对象而不是List<String> stringValues = new ArrayList<String>();
for (Object value : map.values()) {
if (value instanceof String) {
stringValues.add((String) value);
}
}
。然后你必须手动访问该Object的所需String值:
Object
答案 1 :(得分:3)
任何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());
}
}
您可以使用string
类型的值制作地图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());
}
}
答案 2 :(得分:0)
尝试List list = new ArrayList(map.values());
此致