【发布时间】:2018-10-24 18:14:07
【问题描述】:
我正在开发一个简单的聊天应用程序。我需要按时间戳对聊天消息进行排序并获取最后五个元素。
我就是这样做的。它有效,但我不确定这是否是最好的方法。您觉得还有改进的余地吗?
private ArrayList<ChatMessage> chatMessages = new ArrayList<>();
private ArrayList<ChatMessage> finalChatMessages = new ArrayList<>();
public ArrayList<ChatMessage> addNewChatMessage(ChatMessage chatMessage) {
//receive new chat message
if (!chatMessages.contains(chatMessage)) {
chatMessages.add(chatMessage);
} else {
int pos = chatMessages.indexOf(chatMessage);
chatMessages.set(pos, chatMessage);
}
//sort chat messages by timestamp
Collections.sort(chatMessages, new Comparator<ChatMessage>() {
public int compare(ChatMessage o1, ChatMessage o2) {
if (o1.getTimestamp() == o2.getTimestamp())
return 0;
return o1.getTimestamp() < o2.getTimestamp() ? -1 : 1;
}
});
//get latest five messages
List<ChatMessage> tail = chatMessages.subList(Math.max(chatMessages.size() - 5, 0), chatMessages.size());
finalChatMessages.clear();
//add new messages to the final list
for (ChatMessage chatMessage : tail) {
finalChatMessages.add(chatMessage);
}
return finalChatMessages;
}
【问题讨论】:
-
你可以在代码审查中发布这个问题,因为它有效而且它不是一个真正的问题。
-
如果此代码正常运行,您应该在我们的姐妹网站Code Review 上发布。
-
@mychemicalro 仅供参考,您可以使用
[CodeReview.SE]在 cmets 中创建链接。这适用于所有 Stack Exchange 站点。关键是找到正确的前缀。