繁体   English   中英

DB4o HashMap toString()

[英]DB4o HashMap toString()

作为DB4o和Java的学习工具,我已经开始创建电话簿。 为此,我创建了一个TelephoneDirectory的实例,其中包含一年和条目的HashMap。

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 telephonedirectory.TelephoneDirectory@da4b71

这显然是因为没有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的结果。 它似乎没有让我更多地了解这个问题,但它可能提供了一种不同的实现方法?

更新:根据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" ,返回所有结果,即“Adam,Bob and Carl”

完整的答案:问题现在已经解决,但只是部分由于给出了答案,所以我将其标记为最佳答案,但在下面给出完整的详细信息。

我不仅应该包含toString我还需要操作ObjectSet ,并且因为查询是基于TelephoneDirectory我能够将ObjectSetTelephoneDirectory 在这样做时,我可以使用它自己的实例方法操纵TelephoneDirectory

非常感谢你的时间和精力。

实现目录的另一种方法是:

public class TelephoneEntry {
  private int year;
  private String name;
  private String tel;

  ....
}

您通过hashmap管理的集合将由db4o 您管理。

更新经过简短讨论后,您可以覆盖TelephoneDirectory.toString():

class TelephoneDirectory {

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (Object k : hashmap.keySet()) {
            // details for you 
        }
        return sb.toString();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM