作为DB4o和Java的学习工具,我开始创建一个电话号码簿。为此,我创建一个TelephoneDirectory的实例,其中包含一年和条目的HashMap。DB4o HashMap toString()
public class TelephoneDirectory {
private int year;
private HashMap<String, String> hashmap;
public TelephoneDirectory(int year) {
this.year = year;
this.hashmap = new HashMap<String, String>();
}
public int getYear() {
return year;
}
public HashMap getHashmap() {
return hashmap;
}
public void addEntry(String name, String number) {
hashmap.put(number, name);
}
}
所以我用addEntry
添加了一些条目。我想要做的是在电话簿中搜索一个特定的名字。为此,我使用QueryByExample(QBE),像这样:
public static void lookupName(String name, int year, ObjectContainer db) {
TelephoneDirectory proto = new TelephoneDirectory(year);
proto.addEntry(name, null);
ObjectSet result=db.queryByExample(proto);
System.out.println("Size:" + result.size());
while(result.hasNext()) {
System.out.println(result.next());
}
}
,我与此具有的问题是,如果结果是在HashMap中找到,那么我需要的键/值对将被打印。到目前为止输出为:
尺寸:1 [email protected]
这显然是因为没有toString()
方法。但是,我将toString()方法放在哪里,因为结果中只有hashmap值的一个子集。
例
TelephoneDirectory dir = new TelephoneDirectory(2011);
dir.addEntry("12345", "Adam");
dir.addEntry("67890", "Bob");
dir.addEntry("24680", "Carl");
然后我查询:
lookupName("Bob", 2011, db);
预期结果:
2011 - 67890:鲍勃
我相信这是简单的,我俯瞰。
在此先感谢。
编辑:我刚刚意识到我正在使用一个ObjectSet作为QBE的结果。它似乎并没有让我对这个问题有更多的了解,但它可能提供了不同的实现方法?
UPDATE:基于PeterMmm的努力,我现在已经调整了以下答复:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(year + "\n");
for (Object k : hashmap.keySet()) {
sb.append(k + ": " + this.lookupName((String)k) + "\n");
}
return sb.toString();
}
当然这里的问题是,toString方法仍然使用整个实例的HashMap即hashmap.keySet();
代替的ObjectSet result
等,在搜索的"bob"
所有结果返回,即“亚当,鲍勃和卡尔”
完整的答案: 的概率lem现在已经解决了,但部分原因是由于给出的答案,所以我会将其标记为最佳答案,但在下面提供全部细节。
我不仅应该包括了toString我还需要操纵ObjectSet
,因为查询是基于在TelephoneDirectory
我能投的ObjectSet
回TelephoneDirectory
。在这样做的时候,我可以使用它自己的实例方法来操作TelephoneDirectory
。
非常感谢您的时间和精力。
这将意味着创建(尺寸为100的目录)100个实例电话簿,这里目前只需要1。 – 2011-04-26 09:12:32
您的持久类中的散列图是需求还是您的设计选择?当您使用对象数据库时,遇到1,100,1000或1.000.000个实例有什么问题。这就是数据库的作用。 – PeterMmm 2011-04-26 14:21:03
不幸的是这是一个要求。你描述的方式会更简单。 – 2011-04-26 14:32:01