Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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_Arrays_Sorting - Fatal编程技术网

Java 基于多列对二维数组进行排序并返回一组不同的记录

Java 基于多列对二维数组进行排序并返回一组不同的记录,java,arrays,sorting,Java,Arrays,Sorting,在java中,我有一个数组 String[][] data = new String[][]{ new String[]{"ABC", "A", "03/01/2009", "02/29/2016"}, new String[]{"ABC", "A", "08/31/2000", "02/17/2016"}, new String[]{"DEF", "A", "07/14/2004", "09/26/2007"},

在java中,我有一个数组

String[][] data = new String[][]{
            new String[]{"ABC", "A", "03/01/2009", "02/29/2016"},
            new String[]{"ABC", "A", "08/31/2000", "02/17/2016"},
            new String[]{"DEF", "A", "07/14/2004", "09/26/2007"},
            new String[]{"ABC", "A", "11/15/2001", "12/18/1997"},
            new String[]{"GHI", "B", "12/18/1997", "08/11/2006"},
            new String[]{"DEF", "A", "11/12/1997", "06/18/1999"}
        };
我想根据4列对其进行排序,我需要将第3列和第4列转换为日期,以获得最新和最旧的日期,因此我的最终数据可以如下所示

ABC A 08/31/2000 02/29/2016
DEF A 11/12/1997 09/26/2007
GHI B 12/18/1997 08/11/2006

所有列都是字符串。

您可以用这种方式轻松排序

public void sort2dArray() {
    String[][] data = new String[][] {
        new String[] { "ABC", "A", "03/01/2009", "02/29/2016"},
        new String[] { "ABC", "A", "08/31/2000", "02/17/2016" },
        new String[] { "DEF", "A", "07/14/2004", "09/26/2007" },
        new String[] { "ABC", "A", "11/15/2001", "12/18/1997" },
        new String[] { "GHI", "B", "12/18/1997", "08/11/2006" },
        new String[] { "DEF", "A", "11/12/1997", "06/18/1999" } };

Arrays.sort(data,new Comparator<String[]>() {

    @Override
    public int compare(String[] o1, String[] o2) {
           DateTimeFormatter formatter = DateTimeFormatter
        .ofPattern("MM/dd/yyyy");
    LocalDate o1Date = LocalDate.parse(o1[2], formatter);
    LocalDate o2Date = LocalDate.parse(o2[2], formatter);
    if (o1[0].equals(o2[0])) {
        if (o1Date.isBefore(o2Date) || o1Date.isEqual(o2Date)) {
        o2[2] = o1[2];
        }
    }
    return LocalDate.parse(o2[3], formatter).compareTo(
        LocalDate.parse(o1[3], formatter));
    }
});

Map<String,String[]> map=new HashMap<>();

for(String[] s:Arrays.asList(data)) {
    if(!map.containsKey(s[0])) {
       map.put(s[0],s);
    }
}
String[][] distinct=new String[map.size()][];

int i=0;
for(String k:map.keySet()) {
    String a[]=map.get(k);
    distinct[i]=a;
    i++;
}
 Arrays.stream(distinct).forEach(a->System.out.println(a[0]+" "+a[1]+" "+a[2]+" "+a[3]));
}

ABC的最新日期不应该是2009年1月3日吗?ABC A 08/31/2000 02/29/2016将是最终结果。对于3kings,我已经使用此逻辑对整个阵列进行了排序:Jomar请参阅我的更新答案。这就是你需要的Jomar现在检查一下。这是生产作为输出你需要的Noor,我感谢你的帮助,但你的输出不同于我的预期结果。
ABC A 08/31/2000 02/29/2016
DEF A 11/12/1997 09/26/2007
GHI B 12/18/1997 08/11/2006