簡體   English   中英

如何在一個 arraylist 中對兩種不同的型號進行排序?

[英]How to sort two different models in one arraylist?

我正在使用呼叫日志的數組列表和 SMS 日志 model class 創建 RecyclerView。 現在我想按日期對列表進行排序。 下面的代碼返回該數組列表return logObjectList 對不起,我的英語不好。

```private List<BaseModel> getCallLog() {
    List<BaseModel> logObjectList;
    logObjectList = new ArrayList<>();
    @SuppressLint("MissingPermission") Cursor cursor = getActivity().getContentResolver().query(CallLog.Calls.CONTENT_URI,
            null, null, null, CallLog.Calls.DATE + " DESC ");
    int number = Objects.requireNonNull(cursor).getColumnIndex("number");
    int type = cursor.getColumnIndex("type");
    int date = cursor.getColumnIndex("date");
    int duration = cursor.getColumnIndex("duration");
    while (cursor.moveToNext()) {
        CallModel log1 = new CallModel(getActivity());
        log1.setNumber(cursor.getString(number));
        log1.setType(cursor.getInt(type));
        log1.setDuration(cursor.getInt(duration));
        log1.setDate(cursor.getLong(date));
        logObjectList.add(log1); }

    @SuppressLint("MissingPermission") Cursor cursor1 = Objects.requireNonNull(getActivity()).getContentResolver().query(Telephony.Sms.CONTENT_URI,
            null,null,null,Telephony.Sms.DATE + " DESC ");
    int smsDate = Objects.requireNonNull(cursor1).getColumnIndexOrThrow(Telephony.Sms.DATE);
    int smsNumber = cursor1.getColumnIndexOrThrow(Telephony.Sms.ADDRESS);
    int smsType = cursor1.getColumnIndexOrThrow(Telephony.Sms.TYPE);
    while (cursor1.moveToNext()){
        SmsModel log2 = new SmsModel(getActivity());
        log2.setNumber(cursor1.getString(smsNumber));
        log2.setDate(cursor1.getLong(smsDate));
        log2.setType(cursor1.getInt(smsType));
        logObjectList.add(log2);
    }
    cursor.close();
    cursor1.close();
    return logObjectList;
}    ```

現在我得到的結果是這樣的:

1-541-754-3010         19-09-28
0 min 58 secs          17:17:54

+49-89-636-48018       19-09-28
1 min 22 secs          17:16:36

47-73512451            19-09-27
3 min 23 secs          09:25:34

73505073               19-09-26
2 min 02 secs          10:29:54

80046004               19-09-25
0 min 0 secs           13:21:00

1414                   19-09-28
Received message       14:25:25

47-73512451            19-09-27
Received message       13:00:12

73505073               19-09-26
Sent message           16:03:17

但我想使用這樣的長日期來訂購該列表:

1-541-754-3010         19-09-28
0 min 58 secs          17:17:54

1414                   19-09-28
Received message       14:25:25

+49-89-636-48018       19-09-28
1 min 22 secs          13:16:36

47-73512451            19-09-27
Received message       13:00:12

47-73512451            19-09-27
3 min 23 secs          09:25:34

73505073               19-09-26
Sent message           16:03:17

73505073               19-09-26
2 min 02 secs          10:29:54

80046004               19-09-25
0 min 0 secs           13:21:00

我想我找到了解決辦法。

Collections.sort(logObjectList, (t1, t2) -> {
            long date1 = t1 instanceof CallModel ? ((CallModel) t1).getDate() : ((SmsModel) t1).getDate();
            long date2 = t2 instanceof CallModel ? ((CallModel) t2).getDate() : ((SmsModel) t2).getDate();
            return Long.compare(date2,date1);
        }); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM