Java 反转哈希映射<;字符串,对象>;到不同的集合和/或列表

Java 反转哈希映射<;字符串,对象>;到不同的集合和/或列表,java,oop,map,hashmap,reverse,Java,Oop,Map,Hashmap,Reverse,我会尽可能简单地解释我被困的原因 基本上,我正在尝试实现一个处理用户数据的解决方案 我有一个类似于的映射,它将用户ID存储为键,用户对象存储为值。用户对象有一些字段,如位置、名称、年龄等 通过使用地图,我希望有一些集合或其他地图来对用户数据进行分类。例如,我正在尝试获取另一个类似的地图,该地图将存储一组居住在同一位置的用户,以此类推 我尝试了一些技巧,也检查了一些链接,比如and和其他一些链接,还尝试实现了一些用于反转的基本代码 Set<String> userid = new Ha

我会尽可能简单地解释我被困的原因

基本上,我正在尝试实现一个处理用户数据的解决方案

我有一个类似于
的映射,它将用户ID存储为键,用户对象存储为值。用户对象有一些字段,如位置、名称、年龄等

通过使用地图,我希望有一些集合或其他地图来对用户数据进行分类。例如,我正在尝试获取另一个类似
的地图,该地图将存储一组居住在同一位置的用户,以此类推

我尝试了一些技巧,也检查了一些链接,比如and和其他一些链接,还尝试实现了一些用于反转的基本代码

Set<String> userid = new HashSet<String>();
Map<String, Set<String>> returnvalue = new HashMap<String, Set<String>>();
HashMap<String, String> userReason = convertForReason();
for (Entry<String, String> entry : userReason.entrySet()) {
    userid.add(entry.getKey());
}
Set userid=new HashSet();
Map returnvalue=new HashMap();
HashMap userReason=convertForReason();
for(条目:userReason.entrySet()){
添加(entry.getKey());
}
但是我被困在了如何创建新地图的问题上,有什么想法可以实现吗?还是其他解决此类问题的方法

更新:

以下是我对自己问题的看法:

Map>returnValue=newhashmap>(); HashSet reasonSet=新的HashSet()

for(字符串userId:userData.keySet()){
UserObject obj=userData.get(userId);
字符串位置=obj.getLocation();
字符串username=obj.getUserid();
if(returnValue.get(location)==null){
reasonSet=新的HashSet();
添加(用户名);
returnValue.put(reason,reasonSet);
}否则{
HashSet tmp=returnValue.get(位置);
tmp.add(用户名);
returnValue.put(位置,tmp);
}

感谢Byter为我提供了解决此问题的见解和更好的想法:)如果大小过大,我不太确定性能会受到怎样的影响,但是

假设您将位置作为userdata,并且希望给定位置的不同用户

 Map<String, Set<String>> returnvalue = new HashMap<String, Set<String>>();
    Map<String, UserObject> userData = getUserData();

    for (String userId : userData.keySet()) {
        UserObject obj = userData.get(userId);
        String location = obj.getLocation();
        Set<String> usersInGivenLocation = returnvalue.get(location);
        if(usersInGivenLocation == null) {
           usersInGivenLocation = new HashSet<String>();
           returnvalue.put(userId,usersInGivenLocation);
        }
        usersInGivenLocation.add(userId);
    }
Map returnvalue=newhashmap();
Map userData=getUserData();
for(字符串userId:userData.keySet()){
UserObject obj=userData.get(userId);
字符串位置=obj.getLocation();
设置usersInGivenLocation=returnvalue.get(位置);
if(usersInGivenLocation==null){
usersInGivenLocation=newhashset();
returnvalue.put(userId,usersInGivenLocation);
}
usersInGivenLocation.add(userId);
}
我希望这就是你想要的

 Map<String, Set<String>> returnvalue = new HashMap<String, Set<String>>();
    Map<String, UserObject> userData = getUserData();

    for (String userId : userData.keySet()) {
        UserObject obj = userData.get(userId);
        String location = obj.getLocation();
        Set<String> usersInGivenLocation = returnvalue.get(location);
        if(usersInGivenLocation == null) {
           usersInGivenLocation = new HashSet<String>();
           returnvalue.put(userId,usersInGivenLocation);
        }
        usersInGivenLocation.add(userId);
    }