[英]Sort array of strings by two filters
我有以下字符串數組:“ 0 11”,“ 22 34”,“ 5 14”,“ 22 13” ...如何對其進行排序,以便兩個數字都按升序排列:“ 0 11”,“ 5 14”,“ 22 13”,“ 22 34”?
您只需要實現一個合適的Comparator
。 像那樣:
public static void main(String[] args) {
String [] ar = {"0 11", "22 34", "5 14", "22 13"};
Arrays.sort(ar, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String [] value1 = o1.split(" ");
String [] value2 = o2.split(" ");
Integer o1First = Integer.valueOf(value1[0]);
Integer o1Second = Integer.valueOf(value1[1]);
Integer o2First = Integer.valueOf(value2[0]);
Integer o2Second = Integer.valueOf(value2[1]);
if (!o1First.equals(o2First))
return o1First.compareTo(o2First);
return o1Second.compareTo(o2Second);
}
});
System.out.println(Arrays.toString(ar));
}
使用Collections.sort(List, Comparator)
嘗試一下,
Collections.sort(yourList, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
String[] split1 = s1.split(" ");
String[] split2 = s2.split(" ");
int n = split1[1].compareTo(split2[1]);
if (n == 0) {
return Integer.valueOf(split1[0]).compareTo(
Integer.valueOf(split2[0]));
}
return n;
}
});
稍微冗長一些:
Arrays.sort(ar, Comparator.comparingInt((String s) -> Integer.parseInt(s.split(" ")[0]))
.thenComparingInt((String s) -> Integer.parseInt(s.split(" ")[1])));
不幸的是,Java當前尚未內置對元組值類型的支持。 否則,代碼可能會更短。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.