Решение 100 процентов рабочее, проверил несколько раз. Валидатору не по душе
Убедись, что список lines в нужных местах содержит операции REMOVED c нужными строками.
Само решение сделал по принцыпу
1) Список REMOVED елементов = список1.removeAll(список2)
2) Список ADDED елементов = список2.removeAll(список1 + REMOVED)
3) Список SAME елементов = список1.removeAll(ADDED + REMOVED)
для примера - ADDED + REMOVED = ADDED.AddAll(REMOVED)
Итого только AddAll и RemoveAll.
package com.javarush.task.task19.task1916;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
/*
Отслеживаем изменения
*/
public class Solution {
public static List<LineItem> lines = new ArrayList<LineItem>();
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String file1 = bufferedReader.readLine();
String file2 = bufferedReader.readLine();
BufferedReader fileReader1 = new BufferedReader(new FileReader(file1));
BufferedReader fileReader2 = new BufferedReader(new FileReader(file2));
bufferedReader.close();
ArrayList list1 = new ArrayList();
ArrayList list2 = new ArrayList();
while (fileReader1.ready()) {
list1.add(fileReader1.readLine()); }
fileReader1.close();
while (fileReader2.ready()) {
list2.add(fileReader2.readLine()); }
fileReader2.close();
ArrayList removed = new ArrayList(list1);
ArrayList added = new ArrayList(list2);
ArrayList same = new ArrayList(list1);
removed.removeAll(list2); //removed ELEMENTS
ArrayList listtmp = new ArrayList(list1); // temp copy of list1
listtmp.addAll(removed); // list 1 + removed elements
added.removeAll(listtmp); //added ELEMENTS (list2 - (list1+added))
ArrayList listtmp2 = new ArrayList(removed); // temp of removed list
listtmp2.addAll(added); // added elements + removed elements
same.removeAll(listtmp2); // Same Elements (list1 - (added + removed))
for (Object o : removed) {
lines.add(new LineItem(Type.REMOVED, o.toString())); }
for (Object o : added ) {
lines.add(new LineItem(Type.ADDED, o.toString())); }
for (Object o : same) {
lines.add(new LineItem(Type.SAME, o.toString())); }
/*
for (LineItem z : lines) {
System.out.println(z.line);
System.out.println(z.type);
}
*/
}
public static enum Type {
ADDED, //добавлена новая строка
REMOVED, //удалена строка
SAME //без изменений
}
public static class LineItem {
public Type type;
public String line;
public LineItem(Type type, String line) {
this.type = type;
this.line = line;
}
}
}