【问题标题】:how to put map values into list with different type?如何将地图值放入不同类型的列表中?
【发布时间】:2015-06-04 11:04:11
【问题描述】:
  1. 我有map<Integer,Object>
  2. 我想把地图的值放到List<String>
  3. ArrayList<String>(map.values) 给了我一个错误
  4. 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());
}

谢谢大家!

【问题讨论】:

  • 您的Collection 指定它可能包含任何Object。您的List 只能包含String 的实例。如果您的地图值实际上都是字符串,请修复您的地图定义。
  • 否则您将无法手动执行此操作,如果您想要的话,请在您的对象上调用 toString()。
  • 如果是TravelData,那么请提供这个类的接口以及你想要的List中的值。
  • 为什么不将 toString 添加到您的 TravelData 并在打印时遍历条目集并获取值意味着您的 traveldata 并打印它

标签: java list dictionary


【解决方案1】:

根据您使用&lt;Integer, Object&gt; 初始化地图的情况,调用Map.values() 将返回Collection&lt;Object&gt;。 这意味着您必须将 ArrayList 初始化为:

List<Object> value = ArrayList<Object>(map.values());

但这没有用,因为map.values() 的返回已经是一个集合,当你不依赖接口List 的API 部分时,你可以坚持下去。

但是你想要一个 List&lt;String&gt; ,其中 Map 的值是字符串,那么你必须做这样的事情:

List<String> stringValues = new ArrayList<String>();
for (Object value : map.values()) {
    if (value instanceof String) {
        stringValues.add((String) value);
    }
}

这是将所有值作为对象进行迭代,然后检查 String 上值的实例类型。如果是这样,请将值作为字符串添加到您的列表中。

所以问题很奇怪,但取决于评论。 如果地图正在处理自定义复杂对象而不是 Object。然后您必须手动访问该对象的所需字符串值:

List<String> stringValues = new ArrayList<String>();
for (ComplexObj value : map.values()) {
    stringValues.add(value.getDesiredStringValueGetterMethodIfYouUseBeanSyntax());
}

【讨论】:

  • 谢谢。但我并没有说清楚。我的对象是名为 TravelData 的类对象,其中几乎没有变量,例如双精度数、日期和字符串。我处理它们并像 一样放入地图中。然后我必须将它们放入 List 并全部打印出来。我无法更改列表类型 :(
  • 谢谢我重写 toString 方法并像你上面告诉我的那样调用它。
【解决方案2】:

任何集合都可以作为参数传递给构造函数,只要它的类型扩展了 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());
      }
    }
    

【讨论】:

    【解决方案3】:

    试试List list = new ArrayList(map.values());

    问候

    【讨论】:

    • 给我一个错误 TravelData cannot be cast to java.lang.String
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    相关资源
    最近更新 更多