【问题标题】:How to loop through all values of a HashMap and print out any values containing a searched term如何遍历 HashMap 的所有值并打印出包含搜索词的任何值
【发布时间】:2015-12-02 02:03:26
【问题描述】:

我有一张地图:

private HashMap<String, CompactDisc> database;

每个CompactDisc 对象都有一个艺术家,我想让用户输入一个字符串并搜索哈希映射并打印出包含该字符串的所有值。 因此,如果我搜索"Jackson",我会同时获得 The Jackson 5 和 Michael Jackson(假设它们在 CD 中)。

【问题讨论】:

标签: java search hashmap


【解决方案1】:

遍历 HashMap 的值并检查 CompactDisc 的艺术家姓名是否包含指定的字符串。

for (CompactDisc cd : database.values()) {
    if(cd.getArtist().contains(searchString)){
        System.out.println(cd.getArtist());
    }
}

假设CompactDisk 有一个返回字符串的getArtist() 方法。而searchString是用户指定的字符串。

【讨论】:

    【解决方案2】:

    Commons Collections 提供了一种过滤 Collection 对象的好方法:

    // Set up data
    String searchString = "Jackson";
    HashMap<String, CompactDisc> database = new HashMap<String, CompactDisc>();
    database.put("key1", new CompactDisc("Jackson 5"));
    database.put("key2", new CompactDisc("Michael Jackson));
    database.put("key3", new CompactDisc("Random artist"));
    
    List<CompactDisc> values = database.values();
    CollectionUtils.filter(values , new Predicate<CompactDisc>(){
       public boolean evaluate( CompactDisc obj ) {
         return obj.getArtist().contains(searchString);
       }
      });
    

    给定searchString = "Jackson",在调用.filter 后,values 列表将仅包含CompactDiscs 和包含"Jackson" 的艺术家。

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多