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