Java 在列表中,存储的映射值为对象类型

Java 在列表中,存储的映射值为对象类型,java,list,map,Java,List,Map,我有一张地图,地图的内容被添加到列表中。我发现的问题 调试是在列表中添加不应该发生的对象(而不是它们的值) 将数据添加到地图中的代码: List<Pair> pairList = new ArrayList<Pair>(); Map<Long, Integer> result = new LinkedHashMap<Long, Integer>(); for (Object[] arr : list) { result.put((Lo

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

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

 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]);
 }
List pairList=new ArrayList();
映射结果=新建LinkedHashMap();
对于(对象[]arr:list){
结果.put((长)arr[0],(整数)arr[1]);
}
将数据从地图传输到列表的代码:

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

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

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

好的,让我们看看代码,我们可以:

List<Pair> pairList = new ArrayList<Pair>();
list
未在此代码位中定义,因此据我们所知,您正在迭代一些包含对象数组的随机列表,即
list
类型为
list
。这段代码中有一些可疑的地方,看起来好像你通过一张地图把东西从一个列表拖到另一个列表。我无法想象任何合理的情况,但让我们继续

for(Map.Entry<Long, Integer> entries : result.entrySet()){
    pairList.add(new Pair(entries.getKey(), entries.getValue()));
}
for(Map.Entry条目:result.entrySet()){
添加(新对(entries.getKey(),entries.getValue());
}
在这里,您迭代映射中的条目,并将它们放入一个
对象中,该对象依次放入我们的
对列表

因此,您在列表中输入的实际上是
Pair
s,而不是映射条目的值。如果需要输入值,那么只需输入值即可

除了现在的
对象之外,它的使用方式与
映射项
相同;因此,除非您想对
对执行一些自定义魔术,否则您不需要自定义类来表示键值对


如果您坚持保留
Pair
类,但希望能够通过打印列表或在IDEs调试器中检查列表来调试它们,那么您可能希望重写
toString()
对中的
方法
类。

for声明中的
列表
应该是
对列表
?您能在列表中列出您的值吗?输出呢?你指的是什么对象?
pairList
当然将包含
Pair
对象。如果您正在谈论传递给
构造函数的两个参数不正确,那么请验证第一个
列表
的内容实际上是您认为的内容。
for(Map.Entry<Long, Integer> entries : result.entrySet()){
    pairList.add(new Pair(entries.getKey(), entries.getValue()));
}