天天看點

java 集合中對象的排序 和去重

對list 集合對象中 重複度資料進行排序

1、實體類 中 實作 Comparable 接口中的compareTo 方法

用 什麼來比較 集合中的排序

2、對集合中的的對象進行去重,重寫 hashCode 方法和 equals方法

package com.huayi.minprogramdemo.entry;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

import java.util.Date;
import java.util.Objects;

/**
 * Database Table Remarks:
 * 聊天記錄表
 * <p>
 * This class was generated by MyBatis Generator.
 * This class corresponds to the database table message
 *
 * @mbg.generated do_not_delete_during_merge
 */
@Data
public class Message extends BaseEntity implements Comparable<Message> {

    private User user;


    @TableId(value = "mId", type = IdType.AUTO)
    private Integer mId;
    // 消息内容
    private String mPostMessage;

    // 消息發送狀态
    private Integer mStatus;
    //發送時間
    @JSONField(format = "yyyy-MM-dd HH:mm")
    private Date mTime;

    // 消息類型id
    private Integer mMessageTypeId;

    // 發送方 id
    private String mFromUserId;
    // 接受方 id
    private String mToUserId;


    @Override
    public int compareTo(Message o) {
        return this.mTime.compareTo(o.getMTime());
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Message message = (Message) o;
        return message.getUser().getUsername().equals(user.getUsername()) && message.getUser().getUserId().equals(user.getUserId());
    }

    @Override
    public int hashCode() {
        String username = user.getUsername();
        String userId = user.getUserId();
        return Objects.hash(username, userId);
    }
}
           

排序方法實作

1、Collections.sort(list,new Comparator(){

@Override

public int compare(Message o1, Message o2) {

return o2.getMTime().compareTo(o1.getMTime());

}

});

集合中去重:

通過實體類中比較 userName 和userId 是否相同,如果相同即認為對象相等

Set messageSet = new HashSet<>(sendMessages);

@Override
    public String selectNewMessageList(String userId) {
        List<Message> sendMessages = messageMapper.selectSendNewMessageList(userId);
        List<Message> receiveMessages = messageMapper.selectReceiveNewMessageList(userId);
        sendMessages.addAll(receiveMessages);
        // 對數組進行排序==降序,對重複的資料 給 remove 掉
        Collections.sort(sendMessages, new Comparator<Message>() {
            @Override
            public int compare(Message o1, Message o2) {
                return o2.getMTime().compareTo(o1.getMTime());
            }
        });
        // 對集合中的元素進行去重
        Set<Message> messageSet = new HashSet<>(sendMessages);
        List<Message> messageList = new ArrayList<>(messageSet);
//        messageList.forEach(System.out::println);
        return JSON.toJSONString(messageList);
    }