你可以簡單地實現對第一空間的自定義Comparator<String>
和分裂(限制分割到2
)。我還假定關係應該按照詞彙順序排列(按字母順序排列)。像,
List<String> al = new ArrayList<>(Arrays.asList("2 John", //
"3 Matt", "3 Adam Smith"));
al.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String[] a = o1.split("\\s+", 2); // <-- split on white space, limit 2.
String[] b = o2.split("\\s+", 2);
int r = Integer.compare(Integer.parseInt(a[0]), //
Integer.parseInt(b[0]));
if (r != 0) {
return -r;
}
return a[1].compareTo(b[1]);
}
});
System.out.println(al);
其輸出(如我想你想)
[3 Adam Smith, 3 Matt, 2 John]
你可以實現一個類'PlayerScore'說「包含」兩者的得分和球員的名字,並把該類的實例爲你的'ArrayList'。但是,在排序自定義類時,您可能會遇到另一個問題,但可以隨時提出另一個問題。 – Izruo
我知道這可能是一種矯枉過正,但我會將每個名稱表示爲一個對象,即「2 john」將是一個人物對象,其中包含一個用於保存其名稱的數字和字符串名稱的int對象。 C#結構本來是最適合這個的,但由於Java沒有結構,所以在如此小的數據上實現它顯然是一種矯枉過正,但它可行。那麼您可以將所有對象插入到您的ArrayList中,並對最高得分者進行線性搜索並將該人對象存儲到另一個列表中,但不要忘記從包含無序數據的數組列表中刪除最高得分者。 –
你可以發佈你試過的代碼嗎? –