データベースからロードするリストがあります。このリストには、あなたに連絡したすべてのユーザーと、あなたに送信されたすべてのメッセージが含まれています。次に、そのリストを取得し、すべてのユーザーを 1 回だけ表示し、そのユーザーから最後にメッセージを受信した時刻を表示する必要があります。このリストは、メッセージ、ユーザー ID、ユーザー名、およびメッセージの日付を含むオブジェクト リストです。
これが、各ユーザーの最終日付を取得するために行ったロジックです。そして、コレクションを使用して日付順に並べ替えました。
ArrayList<NTFMessage> list = new ArrayList<NTFMessage>();
if (ntfmsgsList.size() > 0) {
list.add(ntfmsgsList.get(0));
for (int i = 1; i < ntfmsgsList.size(); i++) {
for (NTFMessage ntfMessage : list) {
if (ntfMessage.getUser_from().contentEquals(ntfmsgsList.get(i).getUser_from())) {
LogService.log(TAG, "---------content equals doesnt add");
if (Long.valueOf(ntfMessage.getDate()) > Long.valueOf(ntfmsgsList.get(i).getDate())) {
LogService.log(TAG, "---------content sets last date");
ntfMessage.setDate(ntfmsgsList.get(i).getDate());
}
break;
} else if (!ntfMessage.getUser_from().contentEquals(ntfmsgsList.get(i).getUser_from())) {
LogService.log(TAG, "---------content doesnt equals does add");
add = true;
break;
}
}
if (add) {
LogService.log(TAG, "---------adds");
list.add(ntfmsgsList.get(i));
add = false;
}
}
}
LogService.log(TAG, "---------List size: " + list.size());
Collections.sort(list, new Comparator<NTFMessage>() {
@Override
public int compare(NTFMessage mess1, NTFMessage mess2) {
return Long.valueOf(mess2.getDate()).compareTo(Long.valueOf(mess1.getDate()));
}
});
私の論理は次のとおりです。新しいリスト、caled リストを作成します。最初の名前を追加してから、ntfmsgslist を調べて、リストにない名前を追加します。チェックした名前が既にリストにある場合は、日付が大きい場合にのみ日付を変更します。これをどのように機能させることができるか考えていますか?現在、ほとんどすべての重複が表示されるため、3 回ではなく 1 つの名前のみが表示されます。