-1

データベースからロードするリストがあります。このリストには、あなたに連絡したすべてのユーザーと、あなたに送信されたすべてのメッセージが含まれています。次に、そのリストを取得し、すべてのユーザーを 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 つの名前のみが表示されます。

4

1 に答える 1

1

コードが複雑になったと思います。次のようなことが簡単にできます。

  • キーがユーザー名になり、HashMap値が実際のNTFMessage(?)
  • ntfmsgsList リスト全体を反復処理する
  • リスト内の各要素についてNTFMessage、ユーザー名を取得して抽出します
  • 以前のものに対してテストしてHashMap、この名前のキーが既にあるかどうかを確認してください。この名前のキーをまだ持っていない場合は、そのNTFMessage. この名前のキーがある場合は、それを使用してNTFMessage、その日付がどこにあるかを確認します (それに基づいて、最初のNTFMessageマップ オブジェクトを置き換えるか、その日付フィールドを更新します)。

コード例:

HashMap<String, NTFMessage> result = new HashMap<String, NTFMessage>();
for (int i = 0; i < ntfmsgsList.size(); i++) { 
     final NTFMessage current = ntfmsgsList.get(i);
     final String userName = current.getUser_from();
     final NTFMessage stored = result.get(userName); 
     if (stored == null) {
         // we don't have this username in the map so add it
         result.put(userName, current);
     } else {
         // there's already a message for this username so see what's up with that
         int status = Long.valueOf(current.getDate()).compareTo(Long.valueOf(stored.getDate()));
         if (status > 0) {
             // if status is greater than 0 that means the current item 
             // has a more current date or whatever logic you have
             result.put(userName, current);             
         }           
     } 
}
于 2013-09-30T08:03:37.127 に答える