#java
#java
Вопрос:
У меня есть два файла employee.txt
и salary.txt
. employee.txt
содержит записи сведений о сотрудниках, такие как ( empId, empName , age
) в формате CSV и salary.txt
содержит ( empId,salary,TDS paid, ...
).
Я хочу записать общие записи обоих файлов (на основе empId
равенства) в третий файл. Я хочу, чтобы пересечение записей походило на JOIN
операцию в базе данных.
Как я могу эффективно сделать это, используя Java (например, используя некоторую коллекцию).
Комментарии:
1. Вы ограничены Java, или вам доступны другие инструменты? Вы, безусловно, можете достичь этого на Java, но я думаю, что это можно было бы сделать гораздо эффективнее на других языках.
2. Извините, мне нужно только решение Java.
Ответ №1:
Запустите первый файл и сохраните хэш-таблицу, где ключом является empid, и задайте значения из employee.txt . Затем на следующем шаге вы запускаете второй файл. Используя empid из второго файла, выполните поиск во встроенной хэш-таблице, есть ли у вас такой ключ. Если да: получите значение из хэш-таблицы и запишите его вместе с информацией о записи из второго файла. Нет: просто пропустите запись. Повторяйте до конца второго файла.
Комментарии:
1. Спасибо, братан, я думаю, это то решение, которое мне было нужно 🙂
Ответ №2:
Что ж, одним из способов может быть загрузка содержимого ваших двух файлов в выбранную вами систему баз данных. Выполните SQL-соединение для двух результирующих таблиц и запишите результат в другой CSV-файл. Это, вероятно, можно было бы сделать даже без Java вообще. Просто используя инструмент управления СУБД, такой как phpMyAdmin для Mysql.
Другим способом было бы прочитать оба файла, либо написав свой собственный csv-«анализатор», либо используя какой-нибудь существующий. Затем в двойном цикле проверьте оба файла на равенство по EmpID и сохраните общие записи в 3-м массиве. Которые могут быть экспортированы в csv, как и раньше, либо вручную, либо с помощью csv-класса по вашему выбору.
Надеюсь, это поможет.
Комментарии:
1. В этом случае я должен каждый раз проверять каждую запись во втором файле, поскольку во втором файле может присутствовать или не присутствовать идентификатор emplId, который был в первом файле, а также он может присутствовать в любой случайной строке.
2. Ну да, это не так эффективно, как могло бы быть. Но в зависимости от количества записей во входных файлах и частоты, с которой используется этот маленький инструмент объединения, это может быть разумный подход.
Ответ №3:
Поскольку базы данных — это то, что представляют собой соединения, и вы бы в основном реализовали (частичную) базу данных самостоятельно, почему бы просто не использовать одну из существующих баз данных в памяти?
HSQLDB — мой личный фаворит, но есть также H2 и Derby (он же JavaDB).
HSQLDB может даже использовать ваши CSV-файлы непосредственно в качестве таблиц!