【问题标题】:in list the value of map being stored is of object type在列表中存储的地图的值是对象类型
【发布时间】:2014-01-29 16:25:41
【问题描述】:

我有一张地图,该地图的内容已添加到列表中。我发现的问题 调试是在列表中添加了不应该发生的对象(而不是它们的值)。

将数据添加到地图中的代码:

 List<Pair> pairList = new ArrayList<Pair>();
 Map<Long, Integer> result = new LinkedHashMap<Long, Integer>();
 for (Object[] arr : list) {
    result.put((Long) arr[0], (Integer) arr[1]);
 }

将数据从地图传输到列表的代码:

for(Map.Entry<Long, Integer> entries : result.entrySet()){
    pairList.add(new Pair(entries.getKey(), entries.getValue()));
}

现在的问题是,在检查列表时,它应该包含值时包含的对象。上面的测试用例有什么问题?

【问题讨论】:

  • list 在 for 声明应该是 pairList?
  • 您能在列表中发布您的价值观吗?和输出?
  • 你指的是什么对象? pairList 当然会包含 Pair 对象。如果您说传入Pair 构造函数的两个参数不正确,那么请验证第一个list 的内容是否真的是您认为的那样。

标签: java list map


【解决方案1】:

您的列表类型为Pair。您创建一个新的 Pair 对象并将其添加到列表中。当您调试您的列表时,您确实会看到一个完整的对象列表。 Pair 类型的对象。如果您检查那些 Pair 对象,您将看到这些值。

【讨论】:

    【解决方案2】:

    好的,让我们看一下代码吧:

    List<Pair> pairList = new ArrayList<Pair>();
    

    这条线清楚地表明pairListListPairs。

    Map<Long, Integer> result = new LinkedHashMap<Long, Integer>();
    for (Object[] arr : list) { 
        result.put((Long) arr[0], (Integer) arr[1]);
    }
    

    list 未在此代码位中定义,因此据我们所知,您正在迭代一些包含对象数组的随机列表,即list 的类型为List&lt;Object[]&gt;。这段代码中有一些可疑的地方,看起来好像您通过地图将内容从一个列表移到另一个列表。我无法想象任何合理的场景,但让我们继续……

    for(Map.Entry<Long, Integer> entries : result.entrySet()){
        pairList.add(new Pair(entries.getKey(), entries.getValue()));
    }
    

    在这里您遍历映射中的条目,并将它们放入Pair 对象中,然后将其放入我们的pairList 中。

    所以,您放入列表中的实际上是Pairs,而不是映射条目的值。如果您需要输入值,则只需输入值。

    除了现在的Pair 对象外,它的使用方式与Map.Entry 相同;所以除非你想用你的Pairs 做一些自定义的魔法,否则你不需要一个自定义类来表示键值对。

    如果您坚持保留 Pair 类,但希望能够通过打印出列表或在 IDE 调试器中检查列表来调试它们,那么您可能希望覆盖 @ 中的 toString() 方法987654338@班级。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      相关资源
      最近更新 更多