目前我正在为我的游戏写一个聊天频道。玩家可以创建聊天频道,其他人可以加入。这是我到目前为止,但我不知道如何返回球员的集合。不推荐使用MultiHashMap,它告诉我在commons.apache文档中使用MultiValueMap。
=Parameters!YourParameter.Value(Globals!PageNumber-1)
现在在我的构造函数中它创建了通道
private static MultiMap<Channel, Client> channels;
我想做的就是归还玩家的集合。这不起作用......
public Channel(Client owner) {
this.owner = owner;
channels = new MultiValueMap<>();
}
帮助表示赞赏。我尝试使用MultiKeyMap,但问题是我无法创建频道,除非他们为密钥选择2个参数,而1代表我不需要的值。如果有更好的选择,请告诉我。
答案 0 :(得分:0)
MultiMap#get(key)
方法实际上返回了一个Collection,但你需要强制转换它。所以你可以获得一个频道的所有玩家,然后迭代它们来执行任何操作。
Collection<Client> players = (Collection<Client>)channels.get(channel);
for (Client player : players) {
player.bla();
}
但是,我不太了解您的数据模型。创建方法
public static boolean create(Client player) {
Channel channel = new Channel(player);
channels.get(channel).get(player).bla();
return true;
}
创建新的Channel
,但不会将其添加到地图中。此外,Channel
构造函数正在创建一个static MultiMap
,它应该保存通道和玩家的映射,但是每个新通道都会创建一个新的地图。
如果你想要实现的目标是
然后这样的事情可以帮助你
public PlayerChannelMap {
public static final MultiMap<Player, Channel> map = new MultiValueMap<>();
}
public Channel {
private List<Client> players = new ArrayList<>();
public addPlayer(Client player) {
players.add(player);
PlayerChannelMap.map.put(player, this));
}
public List<Client> getPlayers() {
return players;
}
}
您的应用程序只有一个MultiMap<Player, Channel> map
。您可以channel.getPlayers()
从频道中获取所有播放器,并通过(Collection<Channel>)PlayerChannelMap.map.get(player)
从地图中获取播放器的所有频道。请注意,将地图放在静态类中并不是理想的解决方案(单例或内存缓存是可行的方法)而且只是想知道我在说什么