简体   繁体   English

如何在一个 arraylist 中对两种不同的型号进行排序?

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

I'm creating the RecyclerView with an array list of the call log, and SMS log model class.我正在使用呼叫日志的数组列表和 SMS 日志 model class 创建 RecyclerView。 Now I want to sort the list by date.现在我想按日期对列表进行排序。 The below code is returning that array list return logObjectList .下面的代码返回该数组列表return logObjectList Sorry for my bad English.对不起,我的英语不好。

```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;
}    ```

The result now I'm getting is like this:现在我得到的结果是这样的:

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

But I want to order that list using a long date like this:但我想使用这样的长日期来订购该列表:

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

I think I found a solution.我想我找到了解决办法。

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