[英]How would I sort an arraylist of strings that's formatted as a height in java?
ArrayList<String> heights = new ArrayList<String>();
Comparator<String> setTableNumber = new Comparator<String>(){
@Override
public int compare(String o1, String o2){{
return (o1).compareTo(o2);}}};
Collections.sort(players, setTableNumber);
假設高度包含這樣的字符串 ["5'11"", "6'11"","4'2""]
我希望它從高到低排序,如 ["6'11"","5'11"","4'2""]
我正在考慮使用 .split('),將字符串轉換為整數,然后將英尺乘以 12,然后將其添加到第二個字符串(在我修剪掉“之后”)並將兩個值作為英寸進行比較。但是有有更好的方法嗎?
提前致謝。
就個人而言,我會預先將String
值轉換為int
(英寸),這使您有機會在對話期間處理可能的錯誤。
ArrayList<String> heights = new ArrayList<String>();
heights.add("5'11");
heights.add("6'11");
heights.add("5'2");
heights.add("4'2");
Comparator<String> setTableNumber = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Integer lhs = convertToInches(o1);
Integer rhs = convertToInches(o2);
if (lhs == null) {
return 1;
} else if (rhs == null) {
return -1;
}
return lhs.compareTo(rhs);
}
protected Integer convertToInches(String value) {
String parts[] = value.split("'");
if (parts.length != 2) {
return null;
}
return (Integer.parseInt(parts[0]) * 12) + Integer.parseInt(parts[1]);
}
};
Collections.sort(heights, setTableNumber);
System.out.println(heights);
哪個打印
[4'2, 5'2, 5'11, 6'11]
此工作流會將“壞”值放在列表的末尾,例如...
ArrayList<String> heights = new ArrayList<String>();
heights.add("Worse");
heights.add("5'11");
heights.add("6'11");
heights.add("5'2");
heights.add("Bad");
heights.add("4'2");
會產生
[4'2, 5'2, 5'11, 6'11, Worse, Bad]
但就個人而言,我會在嘗試對列表進行排序之前處理這個問題(通過將值轉換為int
)。 然后,您可以在要打印時對int
值進行一些額外的格式化
嘗試這個。
public static void main(String[] args) {
List<String> heights = List.of("5'11\"", "6'11\"","4'2\"");
List<String> sorted = heights.stream()
.map(s -> new Object() {
String feetInch = s;
int inch;
{
String[] f = feetInch.replaceFirst("\"", "").split("'");
inch = Integer.parseInt(f[0]) * 12 + Integer.parseInt(f[1]);
}
})
.sorted(Collections.reverseOrder(Comparator.comparing(obj -> obj.inch)))
.map(obj -> obj.feetInch)
.toList();
System.out.println(sorted);
}
輸出:
[6'11", 5'11", 4'2"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.