问题描述
public class Process {
private String id;
private String name;
private Date date;
private String status;
// getterr and setters and constructor
在主类中,我需要像这样初始化对象:
List<Process> processList = new ArrayList<>();
Process process1 = new Process();
process1.setId("1111");
process1.setName("Step one under first status");
process1.setDate(new Date());
process1.setStatus("");
Process process2 = new Process();
process2.setId("1111");
process2.setName("Step two under first status");
process2.setDate(new Date());
process2.setStatus("");
Process process3 = new Process();
process3.setId("1111");
process3.setName("");
process3.setDate(new Date());
process3.setStatus("Status One");
Process process4 = new Process();
process4.setId("1111");
process4.setName("Step one under second status");
process4.setDate(new Date());
process4.setStatus("");
Process process5 = new Process();
process5.setId("1111");
process5.setName("");
process5.setDate(new Date());
process5.setStatus("Status two");
Process process6 = new Process();
process6.setId("2222");
process6.setName("Step one under first status");
process6.setDate(new Date());
process6.setStatus("");
Process process7 = new Process();
process7.setId("2222");
process7.setName("Step two under first status");
process7.setDate(new Date());
process7.setStatus("");
Process process8 = new Process();
process8.setId("2222");
process8.setName("");
process8.setDate(new Date());
process8.setStatus("Status One");
processList.add(process1);
processList.add(process2);
processList.add(process3);
processList.add(process4);
processList.add(process5);
processList.add(process6);
processList.add(process7);
processList.add(process8);
从该列表中,我需要获得一个包含如下对象的新列表:
第一个对象(id = "1111",name = "Step one under first status",date,"Status One")
第二个对象(id = "1111",name = "第一个状态下的第二步","Status One")
第三个对象(id = "1111",name = "第二个状态下的第一步","状态二")
第四个对象(id = "2222",name = "第一个状态下的第一步","状态一")
第五个对象(id = "2222","状态一")
感谢您的帮助,抱歉英语不好(这不是我的母语):)
编辑:
嗨。我不需要删除项目。我需要将它们组合起来(例如 foreach 循环)以获取包含所有数据的项目。例如:process1(id = "1111")有名字但没有状态。 process3 (id ="1111") 状态为“状态一”但没有名称。所以结果需要是:第一个对象(id =“1111”,名称=“第一个状态下的第一步”,日期,“状态一”)
process2 (id = "1111") 也有名字,但没有状态。所以我需要将它们与 process3 (id="1111") 结合起来。结果将是:第二个对象(id =“1111”,名称 =“第一个状态下的第二步”,日期,“状态一”)...
等
process7 有另一个 id = "2222"。它有一个名称 =“第一个状态下的第二步”但没有状态,所以我需要将它们与具有状态的 process8 (id ="2222") 结合起来。结果将是:第五个对象(id = "2222",name = "Step 2 under first status","Status One")
解决方法
我不确定您的意思,但如果您想从列表中删除某些项目(状态 = ""):
processList.removeIf(e -> e.getStatus().equals("");
嗨。我不需要删除项目。我需要将它们组合起来(例如 foreach 循环)以获取包含所有数据的项目。例如:process1 (with id = "1111#) has name but it don't have status. process3 has status "Status One"但没有名字。所以结果需要是:第一个对象(id = "1111",name = "第一个状态下的第一步",date,"状态一")
process2 (id = "1111") 也有名字,但没有状态。所以我需要将它们与 process3 结合起来。结果将是:第二个对象(id =“1111”,名称 =“第一个状态下的第二步”,日期,“状态一”)...
等
process7 有另一个 id = "2222"。它有一个名称 =“第一个状态下的第二步”但没有状态,所以我需要将它们与具有状态的 process8 结合起来。结果将是:第五个对象(id = "2222",name = "Step 2 under first status","Status One")
,好的,谢谢你的澄清,这看起来很简单:
List<Process> resultList = new ArrayList<Process>();
Iterator<Process> i = processList.iterator();
while (i.hasNext()) {
Process p = i.next(); // must be called before you can call i.remove()
if(p.getStatus().isEmpty()) {
for (Process currentProcess : processList) {
if(!currentProcess.getStatus().isEmpty()) {
p.setStatus(currentProcess.getStatus());
resultList.add(p);
break;
}
}
}
i.remove();
}
System.out.println(resultList);
那么你应该有:
流程 [名称=第一个状态下的第一步,id=1111,日期=2021 年 2 月 9 日星期二 19:32:04 CET,状态=状态一], 流程 [名称=第一个状态下的第二步,id=1111,日期=2021 年 2 月 9 日星期二 19:32:04 CET,状态=状态一], 流程 [名称=第二状态下的第一步,id=1111,日期=2021 年 2 月 9 日星期二 19:32:04 CET,状态=状态二], 流程 [名称=第一个状态下的第一步,id=2222,日期=2021 年 2 月 9 日星期二 19:32:04 CET,状态=状态一], 流程 [名称=第一个状态下的第二步,id=2222,日期=2021 年 2 月 9 日星期二 19:32:04 CET,状态=状态一]