我有: Map<Long, Peer>
,其中密钥为peerUid
,value
为Peer
。每个Peer
类似于用户会话容器,包含UserAuthorities
:
public class Peer {
private UserAuthorities authorities;
//...
}
我需要:
快速做:
List<Peer>
UserAuthorities
分组的所有同行:Map<UserAuthorities, List<Peer>>
。peerUid
UserAuthorities
或所有同行的同行
的问题: 的
在我向地图添加新的Peer
时,我已经发现了UserAuthorities
。这意味着UserAuthorities
是可变的。
的的问题: 的
Map<UserAuthorities, List<Peer>>
获取Map<Long, Peer>
? (对等体的近似数量约为20;但是每个用户请求都将执行该操作) P.S: UserAuthorities
更改后?
答案非常简单 - 只有一次登录。用户进入主页,他在服务器端得到Peer
,但尚未获得任何权限。所以他闯入并获得了他们。
答案 0 :(得分:1)
这不是一个答案,所以从技术上讲,它可能不得不被删除 - 但这样的事情很难在评论中讨论......:
所以我假设数据结构应该看起来像这个接口LoginDatastructure
,这是正确的吗?
import java.util.List;
import java.util.Map;
class UserAuthorities {}
class Peer
{
private UserAuthorities authorities;
}
interface LoginDatastructure
{
// 1. Get all peers
List<Peer> getAllPeers();
// 2. Get all peers grouped by UserAuthorities
Map<UserAuthorities, List<Peer>> getPeersByUserAuthority();
// 3. Add new peer (with null UserAuthorities
// and after some time set user authorities)
void addPeer(Peer peer);
// 4a Remove peer by peerUid
void removePeer(long peerUid);
// 4b. Remove peer by peerUid or all peers by UserAuthorities
void removePeers(UserAuthorities u);
}
此示例中您的Map<Long, Peer>
出现在哪里?
关于3:当添加对等体并且它具有null
UserAuthority时,它是否应该包含在方法1返回的列表中?它应该包含在方法2返回的地图中吗?
List<Peer> peersWithNull = map.get(null);
关于更改UserAuthority:当用户权限更改时,是否可以通知此数据结构?也就是说,LoginDatastructure
可以使用其他方法,例如
void userAuthorityWasSet(Peer peer);
当给定对等方的UserAuthority改变时将被调用?
关于第5点,并发性:有没有理由不公然制作所有这些方法synchronized
?
编辑:关于同步:您期望什么样的线程安全?例如,当添加一个Peer时,是否应该在某人可能从方法2的Map获得的所有列表中自动显示?在设置权限时是否还应更新这些列表?在任何情况下,到目前为止,这些方法主要是在数据结构中添加/删除元素,因此我认为使它们synchonrized
不会产生任何可观的性能影响(当然,除非是数据结构,例如地图,在每次通话期间都是从头开始重建 - 但我想你无论如何都想避免这种情况。
无论如何,我觉得StackOverflow可能不适合进行这种讨论 ....
答案 1 :(得分:-1)
Map
API:Map#values()
Map
API:Map#remove()