Объект имеет атрибут имени типа String и атрибут зависимости того же типа самого объекта.Теперь, если я создаю экземпляр объекта и задаю тот же экземпляр, что и атрибут зависимостей, тогда проверка, является ли объект рефлексивным путем сравнения его имени с именем зависимости, не работает в операторе if.
class Job {
private String name;
private Job dependency;
boolean hasDependency() {
return dependency != null;
}
//getter,setters
}
&
class JobSequence {
private ArrayList<Job> jobsArrayList;
private ArrayList<Job> orderedJobsArrayList = new ArrayList<>();
JobSequence(ArrayList<Job> jobsArrayList) {
this.jobsArrayList = jobsArrayList;
}
void sortByDependency() {
for (Job job : jobsArrayList) {
if (!orderedJobsArrayList.contains(job)) orderedJobsArrayList.add(job);
if (job.hasDependency()) {
if (!isReflexive(job, job.getDependency())) {
if (!orderedJobsArrayList.contains(job.getDependency())) {
int index = orderedJobsArrayList.indexOf(job);
orderedJobsArrayList.set(index, job.getDependency());
orderedJobsArrayList.add(index + 1, job);
}
}
}
}
}
private boolean isReflexive(Job i, Job j) {
return i.getName().equals(j.getName());
}
}
&
public class Main {
public static void main(String[] args) {
Job a = new Job("a");
Job b = new Job("b");
Job c = new Job("c");
a.setDependency(null);
b.setDependency(null);
c.setDependency(c);
ArrayList<Job> jobArrayList = new ArrayList<>();
Collections.addAll(jobArrayList, a, b, c);
JobSequence sequence = new JobSequence(jobArrayList);
sequence.sortByDependency();
sequence.getOrderedJobsArrayList().forEach(p -> System.out.println(p.getName()));
}
}
Результат должен быть a, b НЕ a, b, c