java version "1.7.0_45"
我試圖創建將包含來自JID發送相同的消息複式列表。創建多個列表動態
例如offlineMessageHeaderList將包含來自不同和相同JID的許多消息。 我想將所有具有相同JID的人分組到自己的列表中。
messageList1 -> all messages from John
messageList2 -> all messages from Peter
etc.
然後在最後檢查哪些是空的並將它們添加到groupList中。
但是,我的解決方案並不好,因爲我首先聲明所有內容,並且可以使用相同的JID擁有更多或更少的消息。
檢查和添加
List<List<MessageHeader>> groupList = new ArrayList<>();
List<MessageHeader> messageList1 = new ArrayList<>();
List<MessageHeader> messageList2 = new ArrayList<>();
List<MessageHeader> messageList3 = new ArrayList<>();
List<MessageHeader> messageList4 = new ArrayList<>();
if(offlineMessageHeaderList.size() > 0) {
for(OfflineMessageHeader header : offlineMessageHeaderList) {
log.log(Level.INFO, "JID: " + header.getJid());
log.log(Level.INFO, "Stamp: " + header.getStamp());
log.log(Level.INFO, "User: " + header.getUser());
MessageHeader messageHeader = new MessageHeader(header.getJid(), header.getStamp(), header.getUser());
/* Check do we have message list already for this JID */
/* Does this messageList1 already have this JID message */
if(messageList1.get(0).getJid().compareTo(messageHeader.getJid()) == 0) {
/* then we add all the same Jid to this list */
messageList1.add(messageHeader);
}
else {
/* The JID was different so need to add it to new list */
if(messageList2.get(0).getJid().compareTo(messageHeader.getJid()) == 0) {
messageList2.add(messageHeader);
}
}
/* Do the same for the others */
}
/* Add all the non-empty lists to the groupList */
if(!messageList1.isEmpty()) {
groupList.add(messageList1);
}
if(!messageList2.isEmpty()) {
groupList.add(messageList2);
}
if(!messageList3.isEmpty()) {
groupList.add(messageList3);
}
if(!messageList4.isEmpty()) {
groupList.add(messageList4);
}
}
class of the MessageHeader
public class MessageHeader {
private String mJid;
private String mStamp;
private String mUser;
public MessageHeader(String jid, String stamp, String user) {
mJid = jid;
mStamp = stamp;
mUser = user;
}
public String getJid() {
return mJid;
}
public String getStamp() {
return mStamp;
}
public String getUser() {
return mUser;
}
}
代碼段有什麼辦法,我可以在一個更加動態的方式做到這一點?
謝謝答案。但不是我正在尋找的東西。因爲我不知道我需要多少種類型的messageList。這一切都取決於offlineMessageHeaderList中的JID。我正在尋找將具有相同名稱的所有JID分組到單獨的列表中。但是,我可以有多達10個不同的。所以我最多可以有10個列表。我希望我更清楚。我現在正在研究另一種解決方案,首先對offlineMessageHeaderList進行排序,以查看首先有多少個不同的JID。謝謝。 – ant2009