У меня есть две коллекции, как показано ниже, которые содержат идентификаторы для студентов.
Идентификаторы - это строки в формате 111-1111.например, идентификаторы 221-2534, 215-6365 и т. д.
Collection<String> newKeys = new ArrayList<String>();
Collection<String> oldKeys = new ArrayList<String>();
Идентификаторы находятся в файле фиксированного формата вместе с другими данными.Это первые 8 символов, следующие 10 символов, следующие 10 символов и т. Д.
Я читаю идентификаторы в коллекцию, как показано ниже:
String oldFile = "C:\\oldFile.dat";
String newFile = "C:\\newFile.dat";
BufferedReader in;
String str;
// Read keys from old file
in = new BufferedReader(new FileReader(oldFile));
while ((str = in.readLine()) != null) {
oldKeys.add(str.substring(0, 8).trim());
}
in.close();
// Read keys from new file
in = new BufferedReader(new FileReader(newFile));
while ((str = in.readLine()) != null) {
newKeys.add(str.substring(0, 8).trim());
}
in.close();
Здесь записи в файле:отсортировано по SSN.Поэтому я считаю, что сформированные коллекции также будут отсортированы.
Сейчас:
Дело: Я хочу узнать различия как результирующие списки путем сравнения двух коллекций.То есть мне нужны списки, которые содержат записи, которые были добавлены, записи, которые были удалены, и записи, которые являются одинаковыми.
Затем я буду использовать список, имеющий общие записи, для чтения соответствующих данных из обоих файлов и сравнения их для любых модификаций..
То есть после того, как у меня есть общий список -
a) Возьмите идентификатор из списка.Считайте соответствующие данные для этого идентификатора из обоих файлов в строки.Сравните строку для любых различий.В случае различий, переместите строку newFile в файл с обновлениями.
b) Ничего не делайте в случае отсутствия различий.
Вопросы:
1) Это правильный подход?
2) Также, как сравнить две коллекции, чтобы получить результирующие списки, а именно.toBeDeleted, toBeAdded и sameEntries?
3) Как прочитать определенную строку из файла на ключе (в данном случае идентификатор студента)?
Обновить:
Основываясь на ответе ниже, добавил следующий код:
Iterator<String> iOld = oldKeys.iterator();
Iterator<String> iNew = newKeys.iterator();
Map<String, String> tempMap = new HashMap<String, String>();
while (iOld.hasNext()) {
tempMap.put(iOld.next(), "old");
}
while (iNew.hasNext()) {
String temp = iNew.next();
if (tempMap.containsKey(temp)) {
tempMap.put(temp, "both");
}
else {
System.out.println("here");
tempMap.put(temp, "new");
}
}
Так что теперь у меня есть карта, которая имеет:
Записи должны бытьдля сравнения: Записи в приведенной выше карте со значением "both"
Записи для добавления: Записи в вышеуказанной карте со значением "new"
Записиподлежит удалению: Записи в приведенной выше карте со значением "old"
Итак, моя проблема сводится к:
Как прочитать определенную строку из файла на ключе, чтобы яможете сравнить их по модификации данных ??
Спасибо за чтение!