使用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,并使用该值填充列表。哦…没有看到此值。将对其进行更改。