java - Java中是否有Map支持通过(非唯一)值查找键?

标签 java guava

我有一个设置,其中我的每个“人员”都映射到一个特定的“房间”。

但是,多人可以映射到同一个房间。

如果看到现有人员,则应将其房间更新为新值。

所以这是 Map<Person, Room>.put(Person, Room) 的传统用例

但是,查找始终是“这个房间里有哪些人?” Set<People> get(Room q){}

我显然可以制作自己的数据结构或 simply iterate over the key-value pairs ;但是Java集合库之一是否具有良好的结构来支持我需要的引用完整性和查找?

最佳答案

要回答您的具体问题,不,您无法使用一种数据结构完成所有工作。我会解决这个问题

Map<Person,Room> personRoom;
SetMultimap<Room,Person> roomPeople;
void addPersonToRoom(Person p,Room r){
    Room currentRoom = personRoom.get(p);
    if (currentRoom != null)
        roomPeople.remove(currentRoom, p);
    personRoom.put(p,r);
    roomPeople.put(r,p);
}
Set<Person> getPeopleInRoom(Room r){
    return roomPeople.get(r);
}
Room getRoomForPerson(Person p){
    return personRoom.get(p);
}

关于java - Java中是否有Map支持通过(非唯一)值查找键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59933827/

相关文章:

testing - Guava Ticker 缓存过期

java - Guava 中的三元运算符问题 : cannot convert from Ordering<Comparable> to Ordering<String>

java - 使用keytool获取证书的MD5签名

java - 如何设计一个持有 java.lang.String 的不可变值类?

java - 使用 Guava 将 Iterable 转换为数组

java - 使用 war 将 spring-boot 和 angular 7 应用程序部署到 tomcat 8.5 中

java - 替代 Java 8 中的 MoreObjects

java - Spring 如何创建应用程序上下文或容器层次结构?

java - 如何理解 wait() 是从超时返回还是从 notify() 返回?

java - 原始包装比较