我有一个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的值?
答案 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;
}
});