Java 如何根据最后一列的最大值对多个字符串的arraylist进行排序?

Java 如何根据最后一列的最大值对多个字符串的arraylist进行排序?,java,arrays,sorting,Java,Arrays,Sorting,我已经打印了double类型的文本文件中的数据,并将其转换为double数组,如下所示 [-2.0, -2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 1.39E-04 -2.0, 0.0, -2.0, -2.0, 0.0, -2.0, 2.0, 0.020446 0.0, -2.0, 2.0, 2.0, -2.0, -2.0, -2.0, 0.032339 2.0, -2.0, -2.0, 2.0, 2.0, -2.0, 2.0, 0.026673 0.0, -2.0,

我已经打印了double类型的文本文件中的数据,并将其转换为double数组,如下所示

[-2.0, -2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 1.39E-04 
-2.0, 0.0, -2.0, -2.0, 0.0, -2.0, 2.0, 0.020446 
0.0, -2.0, 2.0, 2.0, -2.0, -2.0, -2.0, 0.032339 
2.0, -2.0, -2.0, 2.0, 2.0, -2.0, 2.0, 0.026673 
0.0, -2.0, -2.0, 0.0, 2.0, 0.0, 2.0, 0.094135 
0.0, 0.0, -2.0, 0.0, 2.0, 2.0, 0.0, 0.045922 
-2.0, 0.0, -2.0, 0.0, 2.0, 0.0, -2.0, 0.117043 
-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, -2.0, 0.425709 
-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.156286]
-2.0, -2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 1.39E-04 
-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, -2.0, 0.425709 
-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.156286 
-2.0, 0.0, -2.0, 0.0, 2.0, 0.0, -2.0, 0.117043 
0.0, -2.0, -2.0, 0.0, 2.0, 0.0, 2.0, 0.094135 
0.0, 0.0, -2.0, 0.0, 2.0, 2.0, 0.0, 0.045922 
0.0, -2.0, 2.0, 2.0, -2.0, -2.0, -2.0, 0.032339 
2.0, -2.0, -2.0, 2.0, 2.0, -2.0, 2.0, 0.026673 
-2.0, 0.0, -2.0, -2.0, 0.0, -2.0, 2.0, 0.020446 
最后一列是根据特定方程式计算的每行分数。我的问题是如何根据最后一列的最高值对这个arraylist进行排序? 排序数组的输出应该如下所示

[-2.0, -2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 1.39E-04 
-2.0, 0.0, -2.0, -2.0, 0.0, -2.0, 2.0, 0.020446 
0.0, -2.0, 2.0, 2.0, -2.0, -2.0, -2.0, 0.032339 
2.0, -2.0, -2.0, 2.0, 2.0, -2.0, 2.0, 0.026673 
0.0, -2.0, -2.0, 0.0, 2.0, 0.0, 2.0, 0.094135 
0.0, 0.0, -2.0, 0.0, 2.0, 2.0, 0.0, 0.045922 
-2.0, 0.0, -2.0, 0.0, 2.0, 0.0, -2.0, 0.117043 
-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, -2.0, 0.425709 
-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.156286]
-2.0, -2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 1.39E-04 
-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, -2.0, 0.425709 
-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.156286 
-2.0, 0.0, -2.0, 0.0, 2.0, 0.0, -2.0, 0.117043 
0.0, -2.0, -2.0, 0.0, 2.0, 0.0, 2.0, 0.094135 
0.0, 0.0, -2.0, 0.0, 2.0, 2.0, 0.0, 0.045922 
0.0, -2.0, 2.0, 2.0, -2.0, -2.0, -2.0, 0.032339 
2.0, -2.0, -2.0, 2.0, 2.0, -2.0, 2.0, 0.026673 
-2.0, 0.0, -2.0, -2.0, 0.0, -2.0, 2.0, 0.020446 
到目前为止我试过的代码

ArrayList<String> a2 = new ArrayList<String>();
               File file7 = new File("kk.txt");
                  BufferedWriter output7 = new BufferedWriter(new FileWriter(file7));
                  output7.write(array+"");
                  output7.close();
                  Scanner s = new Scanner(new FileReader("kk.txt"));
            while (s.hasNextLine()) {
                String line1 = s.nextLine();
                //store this line to string [] here
               line1 = line1.replaceAll("\\[", "");
               line1 = line1.replaceAll("\\]", "");
               line1= line1.replaceAll("\\;,","\r\n"+"");
               line1= line1.replaceAll("\\;","\r\n"+"");
                a2.add(line1);

            }
           Collections.sort(a2,Collections.reverseOrder());
              System.out.println("Sorted List : " + a2);

但是代码返回数组时不进行排序。感谢您提供的任何帮助

以下是解决您问题的可能方法之一:

表a2=//你的名单 收藏。sorta2, Collections.reverseOrders1,s2->{ 字符串[]d1=s1.split,; 字符串[]d2=s2.split,; 返回Double.compareDouble.parseDoubled1[d1.length-1], Double.parseDoubled2[d2.length-1]; }; a2.forEachSystem.out::println; 对于Java 1.7:

收藏。sorta2, Collections.reverseOrdernew比较器{ @凌驾 公共整数比较s1,字符串s2{ 字符串[]d1=s1.split,; 字符串[]d2=s2.split,; 返回Double.compareDouble.parseDoubled1[d1.length-1], Double.parseDoubled2[d2.length-1]; } }; 输出:

-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, -2.0, 0.425709
-2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 0.156286
-2.0, 0.0, -2.0, 0.0, 2.0, 0.0, -2.0, 0.117043
0.0, -2.0, -2.0, 0.0, 2.0, 0.0, 2.0, 0.094135
0.0, 0.0, -2.0, 0.0, 2.0, 2.0, 0.0, 0.045922
0.0, -2.0, 2.0, 2.0, -2.0, -2.0, -2.0, 0.032339
2.0, -2.0, -2.0, 2.0, 2.0, -2.0, 2.0, 0.026673
-2.0, 0.0, -2.0, -2.0, 0.0, -2.0, 2.0, 0.020446
-2.0, -2.0, -2.0, 2.0, 2.0, 2.0, 2.0, 1.39E-04

注:1.39E-04实际为a,其值为0.000139。这就是为什么它会出现在列表的末尾。

您应该首先将每行拆分为单独的双值,然后使用自定义比较器进行排序。您可以使用标准文件格式吗?csv RFC4180Thank@PavelSmirnov,你能通过代码告诉我吗,因为我还是初学者,当我在代码中添加此代码时,它不起作用?你能说明原因吗?到底什么不起作用?您使用的是哪个版本的Java?我使用的是Java版本1。7@user11801243,此代码使用仅在Java8中引入的lambda表达式。更新了答案并添加了与Java 7兼容的代码。代码非常好,只需一步,答案就会被接受。如何删除括号以使代码正常工作
    Comparator<String> cmp = (o1, o2) -> {
        final Double a1Double = Double.valueOf(o1.substring(o1.lastIndexOf(" ")));
        final Double a2Double = Double.valueOf(o2.substring(o2.lastIndexOf(" ")));
        return a1Double < a2Double ? 0 : -1;

    };