簡體   English   中英

如何根據最后一列的最大值對多個字符串的數組列表進行排序?

[英]How to sort an arraylist of multiple strings based on the highest value of the last column?

我已經從文本類型為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<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);

但是代碼返回的數組沒有排序。 任何幫助表示贊賞

這是您的問題的可能解決方案之一:

List<String> a2 = ...; //your list
        Collections.sort(a2, 
                    Collections.reverseOrder((s1, s2) -> {
                        String[] d1 = s1.split(",");
                        String[] d2 = s2.split(",");
                        return Double.compare(Double.parseDouble(d1[d1.length-1]), 
                                              Double.parseDouble(d2[d2.length-1]));
                    }));

a2.forEach(System.out::println);



對於Java 1.7:

Collections.sort(a2, 
                    Collections.reverseOrder(new Comparator<String>() {
                        @Override
                        public int compare(String s1, String s2) {
                            String[] d1 = s1.split(",");
                            String[] d2 = s2.split(",");
                            return Double.compare(Double.parseDouble(d1[d1.length-1]), 
                                                  Double.parseDouble(d2[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實際上是一個科學 0.000139 ,其值為0.000139 這就是為什么它似乎位於列表的末尾。

    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;

    };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM