我试着保持这个简单,但仍然可以理解。如果有任何混淆,请告诉我!
我得到了这个哈希表:
private Hashtable<String, ArrayList<String>> allChannels = new Hashtable<String, ArrayList<String>>();
我正在使用此方法插入客户端/用户:
public void connectChannel(String username, String channel) throws RemoteException{
allChannels.put(channel, new ArrayList<String>());
allChannels.get(channel).add(username);
}
现在我想使用这个方法,以获得一个连接到给定通道(参数)的用户的arraylist。怎么可以这样做?
@Override
public ArrayList<String> getUsersInChannel(String channel) throws RemoteException{
return **Code needed**
}
谢谢!
编辑:顺便说一下,联系方法得到了几个检查,但它很长,所以我没有费心去粘贴它,因为我知道它工作得很好。编辑:因为使用return allChannels.get(channel)来看似乎是正确的,所以我的JList还有其他问题。我在GUILogic中使用了这些方法来运行JList。我已经让另外两个JList以相同的方式工作了。
DefaultListModel usersInChanDLM = new DefaultListModel();
public DefaultListModel getUsersInChannelAsDefaultListModel() throws RemoteException{
if(!(getChannel() == null)){
for(String a : cf.getUsersInChannel(getChannel())){
usersInChanDLM.addElement(a);
System.out.println(a);
}
}
return usersInChanDLM;
}
void updateUsersInChannelJlist(JList jList3) throws RemoteException {
usersInChanDLM.clear();
usersInChanDLM.removeAllElements();
for(Client c : cf.getClients()){
if(!(usersInChanDLM.contains(c.findName()))){
usersInChanDLM.addElement(c.findName());
}
}
jList3.setModel(usersInChanDLM);
}
所以,我很明显能够看到最后一种方法是搞砸了,因为它添加了列表中的所有客户端。但是应该怎么说呢?
所以,我做到了!
public void updateUsersInChannelJlist(JList jList3) throws RemoteException {
usersInChanDLM.clear();
usersInChanDLM.removeAllElements();
for(String s : cf.getUsersInChannel(channel)){
if(!(usersInChanDLM.contains(s))){
usersInChanDLM.addElement(s);
}
}
jList3.setModel(usersInChanDLM);
}
答案 0 :(得分:5)
要么我错过了一些非常明显的东西,要么你只是忽略了答案(你已经在代码中找到了答案!)
return allChannels.get(channel);
你应该考虑的一件事是,如果你一遍又一遍地调用这个connectChannel方法,你将不断地破坏你的arraylist(因为你每次调用那个方法时都会调用new),所以实际上每个频道注定一直有一个用户。
您应该检查数组列表是否为空,如果不是,请不要再重新实例化(除非我错过了您尝试做的事情,我很可能会这样做)。
答案 1 :(得分:0)
这应该有效
@Override
public ArrayList<String> getUsersInChannel(String channel) throws RemoteException{
return allChannels.get(channel);
}
这一行(你有它)的工作方式相同 - get()
方法为你提供ArrayList
而不是你添加一个项目。
allChannels.get(channel).add(username);
答案 2 :(得分:0)
您的connectChannel方法出错。您不应每次都创建ArrayList。
public void connectChannel(String username, String channel) throws RemoteException{
ArrayList<String> ch = allChannels.get(channel);
if (ch==null){
ch = new ArrayList<String>();
allChannels.put(channel, ch);
}
ch.add(username);
}