Discuss / Java / 交作业

交作业

Topic source
package com.itranswarp.learnjava;
import java.util.*;


public class Main {
    public static void main(String[] args) {
        List<Message> received = List.of(
            new Message(1, "Hello!"),
            new Message(2, "发工资了吗?"),
            new Message(2, "发工资了吗?"),
            new Message(3, "去哪吃饭?"),
            new Message(3, "去哪吃饭?"),
            new Message(4, "Bye")
        );
        List<Message> displayMessages = process(received);
        for (Message message : displayMessages) {
            System.out.println(message.text);
        }
    }


    static List<Message> process(List<Message> received) {
        // TODO: 按sequence去除重复消息
    // list 转换成 set 自动去重  : 需要对 Message类,覆写equals() hashCode() 方法,否则还是无法去重
    Set<Message> set = new HashSet<>(received);
    // list 转换成 ArrayList 可编辑list对象
    return new ArrayList<>(set);
   
    // 第二种 
    // 新建List用来返回, received 是 list.of() 返回的list是只读模式
//    List<Message> list = new ArrayList();
    // 定义成String类型,就不用需要对 Message类,覆写equals() hashCode() 方法,因为String,int底层代码已经实现了
//    Set<String> set = new HashSet<>();
//    for(Message m: received) {
//    if(set.add(m.text)) {  // 内容相同 是false
//    list.add(m);
//    }
//    }
//    return list;
   
    }
}


class Message {
    public final int sequence;
    public final String text;
    public Message(int sequence, String text) {
        this.sequence = sequence;
        this.text = text;
    }
    
    @Override
    public boolean equals(Object o) {
    if(o instanceof Message) {
            Message message = (Message) o;
            return this.sequence == message.sequence && Objects.equals(this.text, message.text);
    }
   
    return false;
    }
    @Override
    public int hashCode() {
        return Objects.hash(this.sequence, this.text);
    }
}


  • 1

Reply