Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对列表排序<;字符串[]>;使用比较器的索引_Java_Sorting_Comparator - Fatal编程技术网

Java 对列表排序<;字符串[]>;使用比较器的索引

Java 对列表排序<;字符串[]>;使用比较器的索引,java,sorting,comparator,Java,Sorting,Comparator,我有一个CSV文件,我需要按两列对内容进行排序。第一列是日期,第四列是文本。我需要那个文件按第一列和第四列排序。 我试着这样做: //i read file and iterate in lines PriorityQueue<String[]> linesOrdenered = new PriorityQueue<>(new LineComparator()); while ((line = br.readLine()) != null) {

我有一个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;
        }

    }

我们无法使用您的输入文件和“格式”,但我的猜测是,使用该格式解析时,所有日期都是不同的(至少在某种程度上,比较它们不会返回0)。

继续Roy Shahaf的想法,假设:

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
在我看来这是正确的。看

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