使用Java中的所有电子邮件从阵列中获取未读消息

时间:2014-04-30 22:12:35

标签: java arrays javamail

我正在尝试编写一个方法,该方法从包含所有消息的数组中获取未读邮件数组。这是我的代码:

public Message[] getUnreadMessages() {
    Message[] messages = inbox.getMessages(1, messageCount);
    Message[] unreadMessages;
    int i = 0;
    for (Message message : messages) {
        boolean isMessageRead = false;
        for (Flags.Flag flag : message.getFlags().getSystemFlags()) {
            if (flag == Flags.Flag.SEEN) {
                isMessageRead = true;
                break;
            }
        }
        String subject = message.getSubject();
        if (isMessageRead) {
            log.debug("Message with subject '" + subject + "' has status read");
        } else {
            unreadMessages[i] = new Message();
            unreadMessages[i] = message;
            i++;
            log.info("Message with subject '" + subject + "' will be processed");
        }
    }
    return unreadMessages;
}

但是,这不起作用,因为我无法实例化新的Message()类型。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以设置:

unreadMessages[i] = message;

之前的行是没用的,因为你只是将指针覆盖一行更深(某些IDE会说这个)

还有一个建议:

将未读消息设为List<Message>,您可以添加Message而无需计算i

public Message[] getUnreadMessages() {
    Message[] messages = inbox.getMessages(1, messageCount);
    List<Message> readMessages = new ArrayList<Message>();
    for (Message message : messages) {
        boolean isMessageRead = false;
        for (Flags.Flag flag : message.getFlags().getSystemFlags()) {
            if (flag == Flags.Flag.SEEN) {
                readMessages.add(message);
                break;
            }
        }
    List<Message> unread = Arrays.asList(messages).removeAll(readMessagess); 
    return unread .toArray(new Message[unread.size()]);
}

答案 1 :(得分:0)

您实际上并不需要将新消息放入数组的行。无论如何,下一行只是覆盖了数组中的那个插槽。