Сортировать списокпо индексам с использованием компаратора - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть файл CSV, и мне нужно отсортировать содержимое по двум столбцам.Первый столбец - это дата, а четвертый - текст.Мне нужно, чтобы этот файл отсортирован по первому и четвертому столбцу.Я пытаюсь так:

//i read file and iterate in lines
PriorityQueue<String[]> linesOrdenered = new PriorityQueue<>(new LineComparator());
while ((line = br.readLine()) != null) {
                String[] row = line.split(CVS_SPLIT_BY);
                if ((!isHeader) && row[0].equals("Route Date")) {
                    header = line;
                    isHeader = true;
                    continue;
                }
                linesOrdenered.add(row);
            }


public class LineComparator implements Comparator<String[]> {
        //string[3] == key
        @Override
        public int compare(String[] strings, String[] t1) {
            int keyComparator = 0;
            try {
                Date dataOne = format.parse(strings[0]);
                Date dataTwo = format.parse(t1[0]);
                keyComparator = dataOne.compareTo(dataTwo);
            } catch (ParseException e) {
                LOGGER.error("Error on parse Data [{}]", e.getMessage());
            }
            if (keyComparator == 0) {
                keyComparator = strings[3].compareTo(t1[3]);
            }
            return keyComparator;
        }

    }

Результатом является PriorityQueue с указанием только даты.Пример содержимого файла CSV:

12/01/2018,6:30,C-993BNT,A1001
12/03/2018,6:30,C-993BNT,A1001
12/04/2018,6:30,C-993BNT,A1001
12/05/2018,6:30,C-993BNT,A1001
12/01/2018,6:30,C-555BQJ,A1003
12/03/2018,6:30,C-555BQJ,A1003
12/04/2018,6:30,C-555BQJ,A1003
12/05/2018,6:30,C-555BQJ,A1003
12/06/2018,6:30,C-555BQJ,A1003
12/07/2018,6:30,C-555BQJ,A1003

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Продолжая идею Роя Шахафа, предполагая:

private static DateFormat format = new SimpleDateFormat("MM/dd/yyyy");

Я получаю:

12/01/2018,6:30,C-993BNT,A1001
12/01/2018,6:30,C-555BQJ,A1003
12/03/2018,6:30,C-993BNT,A1001
12/03/2018,6:30,C-555BQJ,A1003
12/04/2018,6:30,C-993BNT,A1001
12/04/2018,6:30,C-555BQJ,A1003
12/05/2018,6:30,C-993BNT,A1001
12/05/2018,6:30,C-555BQJ,A1003
12/06/2018,6:30,C-555BQJ,A1003
12/07/2018,6:30,C-555BQJ,A1003

, что мне подходит.см https://jdoodle.com/a/QXP

0 голосов
/ 13 декабря 2018

Ваш входной файл и «формат» недоступны для нас, но я считаю, что все даты различаются при разборе с использованием формата (по крайней мере, если их сравнение не возвращает 0).

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