Discuss / Java / 请练习使用Set去除重复的消息

请练习使用Set去除重复的消息

Topic source

净净一隅

#1 Created at ... [Delete] [Delete and Lock User]

package Message;

import java.util.Objects;

public class Message {

    public final int sequence;

    public final String text;

    public Message(int sequence, String text) {

        this.sequence = sequence;

        this.text = text;

    }

    public int getSequence() {

    return this.sequence;

    }

    public boolean equals(Object o) {

    if(o instanceof Message) {

    Message m=(Message) o;

    return this.sequence==m.sequence && this.text.equals(m.text);

    }

    return false;

    }

    public int hashCode() {

    return Objects.hash(this.sequence, this.text);

    }

    public String toString() {

    return "Message[sequence: "+this.sequence+", text:"+this.text+"]\n";

    }

}

package Message;

import static tools.LogUtils.log;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

public class test {

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) {

            log.info(message.text);

        }

    }

    static List<Message> process(List<Message> received) {

        // TODO: 按sequence去除重复消息

    List<Message> list=new ArrayList<>();

    Set<Message> set = new HashSet<>();

    for(Message m:received) {

    if(!set.contains(m)) {

    set.add(m);

    list.add(m);

    }

    }

        return list;

    }

}


  • 1

Reply