Логика метода такова: сравниваю списки, если есть одинаковые строчки - кладу номер списка allLines в массив result. Иначе, очищаю массив и выбрасываю исключение. Предполагаю, что проблема в том, что в списке forRemoveLines могут совпадать несколько строчек со списком allLines, тогда удаление произойдет некорректно. Вопрос: что делать? Я знаю, что я изобретаю велосипед, но хотелось бы доделать этот способ до конца, поздно заглянул в комментарии (а может это даже и к лучшему).
Может ли тут как то помочь итератор?
package com.javarush.task.task17.task1721;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/*
Транзакционность
*/
public class Solution {
public static List<String> allLines = new ArrayList<String>();
public static List<String> forRemoveLines = new ArrayList<String>();
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str1 = reader.readLine();
String str2 = reader.readLine();
File file1 = new File(str1);
FileReader fr = new FileReader(file1);
BufferedReader reader1 = new BufferedReader(fr);
String line1 = reader1.readLine();
while (line1 != null) {
allLines.add(line1);
line1 = reader1.readLine();
}
fr.close();
reader1.close();
File file2 = new File(str2);
FileReader fr2 = new FileReader(file2);
BufferedReader reader2 = new BufferedReader(fr2);
String line2 = reader2.readLine();
while (line2 != null) {
forRemoveLines.add(line2);
line2 = reader2.readLine();
}
fr2.close();
reader2.close();
reader.close();
Solution solution = new Solution();
solution.joinData()
} catch (Exception e) {}
}
public void joinData() throws CorruptedDataException {
List<Integer> result = new ArrayList<Integer>();
for (int i = 0; i < allLines.size(); i++) {
for (int j = 0; j < forRemoveLines.size(); j++) {
if (allLines.get(i).equals(forRemoveLines.get(j))) {
result.add(i);
}
else {
allLines.clear();
throw new CorruptedDataException();
}
}
}
for (int i = 0; i < result.size(); i++) {
allLines.remove(result.get(i));
}
}
}