Сортировка для большого количества строковых записей по времени в Java - PullRequest
0 голосов
/ 25 августа 2018

У меня есть CSV с несколькими миллионами строк записей, мне нравится сортировать его по времени. В настоящее время я просто поместил его в древовидную карту с ключом ZonedDateTime. Есть ли лучший способ сделать это? Угадайте, по крайней мере, лучше использовать toEpochSecond() и использовать EpochSecond в качестве ключа? Есть ли дальнейшее улучшение?

Время указано в поле в CSV, ниже приведен один пример:

ABC.DE,,Market Price,2018-07-19T08:21:32.633494851+01,Quote,,,,,19.01,425,,,21.09,250,,,298911,21:32.6,,,,,,,,,, 

1 Ответ

0 голосов
/ 25 августа 2018

Для сортировки используйте сортировку. Arrays::sort и Collections::sortsorted для потоков).

Кстати, если в случае дублирования времени мне нужно немного откорректировать время, иначе запись будет потеряна. Не уверен, есть ли другой подход, который может использовать меньше памяти, или быстрее, или не должен гарантировать, что время различно.

Конечно, простой sort не нужно время, чтобы быть отчетливым. Скорее всего, он требует меньше памяти и немного быстрее.

Для действительно больших данных вы можете выполнить какую-то сортировку слиянием файлов, чтобы вам не нужно было хранить все это в памяти. Однако, когда у вас так много памяти, тогда нечего приобретать, не так ли?

Угадайте, по крайней мере, лучше использовать toEpochSecond () и использовать EpochSecond в качестве ключа?

Может быть. Или сохраните все синтаксический анализ и сортируйте строки вместо этого. Предполагая, что вы используете один и тот же часовой пояс везде, тогда 2018-07-19T08:21:32.633494851+01 сравнивает одно и то же, независимо от того, рассматриваете ли вы его как дату или время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...