[英]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.