我有一个列表,我需要循环它并将其数据放在hashmap中。我正在使用这种方法
for(int i=0;i<list.size();i++) {
HashMap hMap=new HashMap();
hMap.put("Data", list);
}
但是当我需要从hMap
读取我正以这种方式做的值时
Collection c = hMap.values();
Iterator itr = c.iterator();
while(itr.hasNext()) {
System.out.println("next val is--"+itr.next());
}
next vali is---
以com.bean.xyz@23032bc[id=1]
格式打印,我需要准确的数据,我该怎么做?
答案 0 :(得分:2)
我在这里看到了多个问题
您只能获取hashmap中的最后一个列表项。因为您在每次迭代时都会创建一个新的hashmap,并且在下一次迭代时它的引用会丢失。
您需要在com.bean.xyz类中实现toString方法以输出所需的数据成员
答案 1 :(得分:1)
Map
是从键到值的映射。您需要为列表的每个元素定义应该是什么键,以及值应该是什么。
您的原始代码:
for(int i=0;i<list.size();i++) {
HashMap hMap=new HashMap();
hMap.put("Data", list);
}
这有效地将关键字“数据”映射到值list
,多次重复此映射,但您只有条目。
以下是一个示例:获取List<String>
,并从列表中的该字母开始构建从字母到字符串的映射。
List<String> list = Arrays.asList(
"abc", "def", "ghi", "ijk", "abracadabra"
);
Map<Character,String> map = new HashMap<Character,String>();
for (String s : list) {
map.put(s.charAt(0), s);
}
System.out.println(map); // prints "{g=ghi, d=def, a=abracadabra, i=ijk}"
System.out.println(map.get('i')); // prints "ijk"
System.out.println(map.containsKey('x')); // prints "false"
请注意"abc"
在地图中“丢失”。那是因为你只能将一个键映射到一个值。另一方面,您可以拥有Map<Character,Set<String>>
,即从每个键到设置值的映射。这实际上是一个multimap,而Guava有一个实现。
答案 2 :(得分:0)
我不知道您尝试打印哪种类型的对象。但是,如果它是您尝试打印的一个对象之一,则必须在类中创建一个覆盖对象类中的toString方法。
public string toString()
{
return "";
}
在return语句中,您可以返回一些对象属性。
答案 3 :(得分:0)
首先,您知道您的哈希表只包含一个值,对吧?如果要将list
中的所有项添加到一个哈希表,则必须在for循环外调用HashMap hMap=new HashMap();
。
要输出正确的数据,请为您的类型实施toString()
或将其投射到正确的类型。
答案 4 :(得分:0)
您可能希望按如下方式调整填充HashMap的方式:
HashMap<String,xyz> hMap=new HashMap<String,xyz>();
for(int i=0;i<list.size();i++)
{
hMap.put("Data"+i, list);
}
xyz
是您正在使用的对象com.bean.xyz。这种方法允许您在其对象(如HashMap)中利用Java的泛型功能。
你看到com.bean.xyz@23032bc [id = 1]的原因是你的bean可能没有为它定义toString方法。如果没有toString方法,则使用Object.toString方法,该方法返回对象在JVM堆中的地址。如果要查看其他内容,则必须覆盖对象xyz中的toString方法。
public class xyz {
...
public String toString () {
return "hello world"; //put what you want to see here
}
...
}