Discuss / Java / test

曦煜墨白

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

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去除重复消息

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

        return new ArrayList<>(set);

    }

}

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 m = (Message) o;

            return Objects.equals(this.sequence,m.sequence);

        }

        return false;

    }

    @Override

    public int hashCode() {

        return Objects.hash(sequence);

    }

}

hashSet无序啊

这样应该符合要求

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) {        Set<Message> set = new TreeSet<>(new Comparator<Message>() {            @Override            public int compare(Message o1, Message o2) {                return Integer.compare(o1.sequence, o2.sequence);            }        });        set.addAll(received);        return new ArrayList<Message>(set);    }}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 (this == o) return true;        if (!(o instanceof Message)) return false;        Message message = (Message) o;        return sequence == message.sequence;   // 按sequence去重    }    @Override    public int hashCode() {        return Objects.hash(sequence, text);    }    @Override    public String toString() {        return "Message{" +                "sequence=" + sequence +                ", text='" + text + '\'' +                '}';    }}

  • 1

Reply