Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java中的所有电子邮件从阵列获取未读消息_Java_Arrays_Jakarta Mail - Fatal编程技术网

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

使用Java中的所有电子邮件从阵列获取未读消息,java,arrays,jakarta-mail,Java,Arrays,Jakarta Mail,我正在尝试编写一个方法,从包含所有消息的数组中获取未读邮件消息数组。这是我的代码: public Message[] getUnreadMessages() { Message[] messages = inbox.getMessages(1, messageCount); Message[] unreadMessages; int i = 0; for (Message message : messages) { boolean isMessag

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

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()类型。如何解决这个问题?

您实际上不需要将新消息放入数组的行。下一行将覆盖阵列中的该插槽。

您只需设置:

unreadMessages[i] = message;
前面的一行是无用的,因为您只需将指针覆盖更深一行(某些IDE会这样说)

还有一项建议:

将未读消息设置为
列表
您可以添加
消息
,无需计算
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()]);
}
公共消息[]GetUnderMessages(){
Message[]messages=inbox.getMessages(1,messageCount);
List readMessages=new ArrayList();
用于(消息:消息){
布尔值isMessageRead=false;
对于(Flags.Flag标志:message.getFlags().getSystemFlags()){
if(flag==Flags.flag.SEEN){
readMessages.add(消息);
打破
}
}
List unread=Arrays.asList(messages).removeAll(readMessagess);
返回unread.toArray(新消息[unread.size()]);
}

如果你在下一行做了
unreadMessages[i],你为什么还要这样做
unreadMessages[i]=newmessage();
=message;
?如果可以更改签名以返回列表,这可能会更好,但由于其他原因,这可能不可能。代码很棒,有很多帮助。一件事,当看到标志时,您正在将消息添加到未读消息中。这与此相反,因为这些是readMessages。因此我坚持设置布尔值isMessageRead为true,并使用该值填充列表。哦…没有看到此值。将对其进行更改。