Пересечение записи файла Java

#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-файлы непосредственно в качестве таблиц!