繁体   English   中英

如何将地图值放入不同类型的列表中?

[英]how to put map values into list with different type?

  1. 我有map<Integer,Object>
  2. 我想将地图的值放在te List<String>
  3. ArrayList<String>(map.values)给我一个错误
  4. 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的类型,都可以将其作为参数传递给构造函数

但是在这里,您正在做反向操作,因为对象不能以字符串形式传递,因为它不会扩展字符串

你可以做两件事

  1. 您可以列出对象列表,所有都可以找到

     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()); } } 
  2. 您可以使用字符串类型的值制作地图

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM