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

时间:2015-06-04 11:04:12

标签: java list dictionary

  1. 我有map<Integer,Object>
  2. 我想将地图的值设置为te List<String>
  3. ArrayList<String>(map.values)给我一个错误
  4. The constructor ArrayList<String>(Collection<Object>) is undefined
  5. 编辑: 谢谢。但我没有说清楚。我的对象是类对象名称TravelData,它具有很少的变量,如双精度数,日期和字符串。我处理它们并放入像<Integer,TravelData>.这样的地图然后我必须把它们放到List<String>并打印出来。我无法更改列表类型:(

    解决方法:覆盖toString方法

    multiLangOffers = new ArrayList<String>();
    for (TravelData value : offers.values()) {
        multiLangOffers.add(value.toString());
    }
    

    谢谢大家!

3 个答案:

答案 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的类型

但是你在做反向,因为对象不能在字符串中传递,因为它不会扩展字符串

你可以做两件事

  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. 您可以使用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());

此致