Java Multimap搜索值

时间:2015-04-20 12:40:14

标签: java guava multimap

我有一个Multimap,需要搜索这些值。 看起来像这样

ListMultiMap<String, Person> pers =  ArrayListMultimap.create();
....
Person person = new Person();
person.setName(name);
peson.setAge(age);
person.setId(id);
...
pers.put(name, person);

我需要将名称作为密钥,并且应该可以添加例如两名姓名&#34; Bob&#34;。 ID应该是唯一的。

例如:

Name: Bob, ID:1
Name: Bob, ID:2

我知道如何获取密钥的值&#34; Bob&#34;离开地图。 但是,如何才能获得ID为1的Bob的值?

3 个答案:

答案 0 :(得分:2)

正如评论中所述,get(String key)的{​​{1}}方法将返回给定密钥的ListMultiMap个元素。由于您的List不是密钥的一部分,因此不会对返回的列表产生任何影响。

作为I.K.在接受的答案中说,你可以简单地遍历返回的列表以获得具有给定ID的人。

然而,更适合的数据结构可能是Guava Table,它允许您拥有2个密钥(您也可以将其视为某种person.id Map个,或者在您的情况下Map):

Map<String,Map<Long, Person>>

答案 1 :(得分:1)

这将检索ID为1的人Bob:

ListMultiMap<String, Person> pers =  ArrayListMultimap.create();
List<Person> persons = pers.get("Bob");
for(Person p : persons){
    if (p.getId() == 1){
        //do something
    }
}

答案 2 :(得分:1)

虽然检查答案是正确的,但我认为全番石榴解决方案更优雅:

   Multimap<String, Person> pers =  ArrayListMultimap.create();
   Person firstBob = FluentIterable.from(pers.get("Bob")).firstMatch(new Predicate<Person>() {
        @Override
        public boolean apply(Person p) {
            return p.getId() == 1;
        }
    });