【问题标题】:Java remove duplicate attribute in List<Message>Java 删除 List<Message> 中的重复属性
【发布时间】:2022-11-15 17:57:53
【问题描述】:

我有消息列表,Message 类有 2 个属性,如下所示:

class Message {
    String message;
    long time;
}
List<Message> listMessage = new ArrayList<>();
list.add("A", 1);
list.add("A", 2);
list.add("B", 1);
list.add("C", 1);
list.add("C", 2);

我想从列表中删除重复的消息,但必须保留列表中时间最长的消息

输入

("A", 1), ("A", 2), ("B", 1), ("C", 1), ("C", 2)

期待结果

("A", 2), ("B", 1), ("C", 2)

【问题讨论】:

  • 我会使用list.sort(...) 对列表进行排序,然后使用list.iterator(),它是hasNext()、next() 和remove() 方法。不过,我不会为你做功课。
  • 你试过什么,你的问题到底是什么?很多学习都是试图找到解决问题的方法。我建议更新问题以包含您当前如何解决问题以及什么不起作用

标签: java list


【解决方案1】:
static class Message {
    String message;
    long time;
    
    public Message(String message, long time) {
        this.message = message;
        this.time = time;
    }
}

public static void putLatestMessage(Map<String, Message> messageMap, Message message) {
    if (messageMap.containsKey(message.message) && messageMap.get(message.message).time >= message.time) {
        return;
    } else {
        messageMap.put(message.message, message);
    }
}

public static void main(String[] args) {
    Map<String, Message> messageMap = new HashMap<>();
    putLatestMessage(messageMap, new Message("A", 1));
    putLatestMessage(messageMap, new Message("B", 2));
    putLatestMessage(messageMap, new Message("A", 2));
    putLatestMessage(messageMap, new Message("C", 2));
    putLatestMessage(messageMap, new Message("D", 1));
}

这将解决您的问题。

P.S - 请浏览 Java 中可用的基本数据结构及其用例。

【讨论】:

    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    相关资源
    最近更新 更多