【发布时间】:2014-02-24 15:10:38
【问题描述】:
我有: Map<Long, Peer>,其中键是 peerUid,value 是 Peer。每个Peer 类似于用户会话容器并包含UserAuthorities:
public class Peer {
private UserAuthorities authorities;
//...
}
我需要:
快点做:
- [in half of requests] 获取所有对等点:
List<Peer> - [在每个请求中] 获取按
UserAuthorities分组的所有对等点:Map<UserAuthorities, List<Peer>>。 - [一次用于浏览器选项卡] 添加新对等点(使用 null UserAuthorities 并在一段时间后设置用户权限)
- [arrely] 通过
peerUid删除对等体或通过UserAuthorities删除所有对等体 - 最终在并发环境中实现以上四个语句
问题:
当我在地图上添加新的Peer 时,我还没有UserAuthorities。这意味着UserAuthorities 是可变的。
问题:
- 有什么方法可以快速从
Map<Long, Peer>得到Map<UserAuthorities, List<Peer>>? (对等点的大约数量约为 20;但该操作将针对每个用户请求进行) - 如果不是,如果 Peer.userAuthorities 是可变字段,我该如何实现?
P.S:UserAuthorities 何时更改?
答案很简单——只登录一次。用户进入主页,他在服务器端得到Peer,但还没有任何权限。所以他登录并获取它们。
【问题讨论】:
-
您的意思是 group by
UserAuthorities? -
@RohitJain 是那个 API 方法吗?
-
没有。只是问问而已。你说的是sort,但这看起来更像是分组。
-
@RohitJain 是的,我提到了
groupBy。谢谢 -
我认为“权威”的可变性是一个关键点(这不是政治声明)。只要没有内置的通知机制,就无法通知任何集合有关此字段的更改。因此,唯一的选择是每次从头开始“透明地”创建查询数据(与此字段相关),这可能是您想要避免的。您能否详细说明如何/何时修改
authorities字段?或者是否有一些可能的通知机制(例如可以添加interface PeerListener { void authorityChanged() }?
标签: java collections map concurrency