Java 为什么队列中的元素相同
在项目中我负责邮件发送功能,但在使用队列时出现问题Java 为什么队列中的元素相同,java,queue,Java,Queue,在项目中我负责邮件发送功能,但在使用队列时出现问题 private void createReportEmail() { try { List<Map> list = emailMapper.getToAddress(); System.out.println(list); MailSenderInfo mailSenderInfo = new MailSenderInfo(); mailSenderIn
private void createReportEmail()
{
try
{
List<Map> list = emailMapper.getToAddress();
System.out.println(list);
MailSenderInfo mailSenderInfo = new MailSenderInfo();
mailSenderInfo = CreateEmailService.sendReportMail(emailMapper);
InternetAddress address = new InternetAddress();
for (int i = 0; i < list.size(); i++)
{
if (list.get(i).get("address").toString() != null && list.get(i).get("address").toString() != "")
address = new InternetAddress(list.get(i).get("address").toString());
MailSenderInfo mailSenderInfo2 = new MailSenderInfo();
mailSenderInfo2 = mailSenderInfo;
mailSenderInfo2.setAddress(address);
queue.offer(mailSenderInfo2);
}
for(int i =0;i<list.size();++i)
{
System.out.println(queue.poll().getAddress());
}
} catch (Exception e)
{
e.printStackTrace();
}
}
private void createReportEmail()
{
尝试
{
List List=emailMapper.getToAddress();
系统输出打印项次(列表);
MailSenderInfo MailSenderInfo=新的MailSenderInfo();
mailSenderInfo=CreateEmailService.sendReportMail(emailMapper);
InternetAddress地址=新的InternetAddress();
对于(int i=0;i 对于(int i=0;i您在循环的每个迭代中创建一个新的MailSenderInfo
实例,这是正确的操作,但随后您将其替换为一个现有的MailSenderInfo
实例(在-MailSenderInfo MailSenderInfo=new MailSenderInfo();
中循环之前创建),因此您总是将相同的MailSenderInfo
实例添加到队列中:
for (int i = 0; i < list.size(); i++) {
...
MailSenderInfo mailSenderInfo2 = new MailSenderInfo();
mailSenderInfo2 = mailSenderInfo; // remove this
mailSenderInfo2.setAddress(address);
queue.offer(mailSenderInfo2);
}
for(inti=0;i
如果使用StringUtils
if (StringUtils.isNotBlank(list.get(i).get("address").toString()))
address = new InternetAddress(list.get(i).get("address").toString());
MailSenderInfo mailSenderInfo2 = new MailSenderInfo();
mailSenderInfo2.setAddress(address);
queue.offer(mailSenderInfo2);
并删除行mailSenderInfo2=mailSenderInfo;
。因为mailSenderInfo
包含较旧的对象引用。是的,但我更改了它的“地址”,当我打印“地址”时,我发现它们都是相同的。@Vayne这没关系。如果你多次将同一对象添加到队列中,调用mailSenderInfo2.setAddress(address)
更改队列中所有元素的地址。是的,也许我知道原因。队列存储在指针中,我更改的是唯一的对象,所有元素(指针)都指向同一个对象。为什么不针对(list.get(i).get(“address”).toString()使用StringUtils.isBlank()
类!=null&&list.get(i.get(“地址”).toString()!=“”)
。它将在一个方法中检查这两个条件isBlank()
。谢谢:)好主意。谢谢!!!