Discuss / Java / 评论里感觉搞得有点复杂了

评论里感觉搞得有点复杂了

Topic source

其实不用复写caparable或者equals,只要把消息的序号拿出来,然后能放入集合中的,就说明这个消息不是重复的,放不进去就是重复的。再创建一个新的List,把不重复的这些消息用这个新的List返回回去就可以了。

代码如下:

static List<Message> process(List<Message> received) {
	List<Message> newReceived = new ArrayList<>();
    Set<Integer> set = new HashSet<>();
    // TODO: 按sequence去除重复消息
    for (var ss : received) {
        if(set.add(ss.sequence)) {
        	newReceived.add(ss);
        }
    }
    return newReceived;
}

如果考虑不全的地方,希望有大佬给指出一下。

乞与追逐

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

老哥牛

能够去重,但是不能排序吧,万一传入的是

List.of(
    new Message(1, "Hello!"),
    new Message(3, "去哪吃饭?"),
    new Message(3, "去哪吃饭?"),
    new Message(2, "发工资了吗?"),
    new Message(2, "发工资了吗?"),
    new Message(4, "Bye")
)

好吧,重新审了一下题,老大的题面确实没要求排序,抱歉了

東寶一童

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

不对,作为一个聊天软件,排序应该就是消息传送或者到达的时间顺序,是重要的,如果只有去重没有排序是万万不可的。

如果排序的话,可不可以把HashSet<> 改成 TreeSet<>?


  • 1

Reply