Решил задачу по своему, мое решение прошло проверку, но когда открыл правильно решение, то был очень сильно озадачен.
Читая код правильного решения не могу построить логическую цепочку, почему в том или ином случае выставляется необходимый ТИП.
int oldFileLine = 0;
int newFileLine = 0;
while ((oldFileLine < oldFileLines.size()) && (newFileLine < newFileLines.size())) {
if (oldFileLines.get(oldFileLine).equals(newFileLines.get(newFileLine))) {
lines.add(new LineItem(Type.SAME, oldFileLines.get(oldFileLine)));
oldFileLine++;
newFileLine++;
} else if ((newFileLine + 1 < newFileLines.size()) && oldFileLines.get(oldFileLine).equals(newFileLines.get(newFileLine + 1))) {
lines.add(new LineItem(Type.ADDED, newFileLines.get(newFileLine)));
newFileLine++;
} else if ((oldFileLine + 1 < oldFileLines.size()) && oldFileLines.get(oldFileLine + 1).equals(newFileLines.get(newFileLine))) {
lines.add(new LineItem(Type.REMOVED, oldFileLines.get(oldFileLine)));
oldFileLine++;
}
}
while (oldFileLine < (oldFileLines.size())) {
lines.add(new LineItem(Type.REMOVED, oldFileLines.get(oldFileLine)));
oldFileLine++;
}
while (newFileLine < (newFileLines.size())) {
lines.add(new LineItem(Type.ADDED, newFileLines.get(newFileLine)));
newFileLine++;
}
}