У меня есть два списка, которые содержат WorkflowCommand
с и WorkflowInstanceCommand
с.
public List<WorkflowCommand> workflowList = new ArrayList<>();
public List<WorkflowInstanceCommand> workflowInstanceList = new ArrayList<>();
public class WorkflowCommand {
int id;
String name;
String author;
int version;
@Override
public String toString() {
return "WorkflowCommand{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
", version=" + version +
'}';
}
}
public class WorkflowInstanceCommand {
long id;
int workflowId;
String assignee;
String step;
String status;
@Override
public String toString() {
return "WorkflowInstanceCommand{" +
"id=" + id +
", workflowId=" + workflowId +
", assignee='" + assignee + '\'' +
", step='" + step + '\'' +
", status='" + status + '\'' +
'}';
}
}
Нужно распечатать результаты выше двух
Найти всерабочие процессы с соответствующими им экземплярами Workflow.
Поиск всех рабочих процессов, имеющих запущенные экземпляры, и количество этих экземпляров Workflow.
Код для первого запроса:
workflowList.forEach(w -> {
System.out.println("==workflow data=="+w);
workflowInstanceList.stream()
.filter(wi -> w.getId() == wi.getWorkflowId())
.forEach(System.out::println);
});
Код для второго запроса:
workflowList.forEach(w -> {
List<WorkflowInstanceCommand> instanceCommands = workflowInstanceList.stream()
.filter(wi -> w.getId() == wi.getWorkflowId())
.filter(wi -> wi.getStatus().equals("RUNNING"))
.collect(Collectors.toList());
System.out.println("==workflow data=="+w+"===size=="+instanceCommands.size());
instanceCommands.forEach(System.out::println);
});
Есть ли другой эффективный способ сделать это?