更好的方法来编写这个比较器?
Comparator<JSONObject> comparator = (op1,op2) -> {
Integer id1 = Integer.valueOf(String.valueOf(op1.get(field)));
Integer id2 = Integer.valueOf(String.valueOf(op2.get(field)));
return id2.compareTo(id1);
};
是否可以避免两个valueOf
?
答案 0 :(得分:2)
Comparator.comparingInt
您应该能够执行以下操作:
Comparator<JSONObject> comparator =
Comparator.comparingInt(obj -> Integer.valueOf(String.valueOf(obj.get(field))))
.reversed();
getInt
检查JSONObject
的API以查看是否有getInt
方法或类似方法,然后您应该可以直接使用它而不是包含在valueOf
个调用中,如:
Comparator<JSONObject> comparator = Comparator.<JSONObject>comparingInt(obj -> obj.getInt(field))
.reversed();
.get
或者,您应该调查obj.get(field)
返回的类型。如果你很幸运,它可以像一个类型一样简单:
Comparator<JSONObject> comparator =
Comparator.<JSONObject>comparingInt(obj -> (Integer) obj.get(field))
.reversed();
String
如果您Strings
的结果总是obj.get
,那么您应该可以直接使用Integer.valueOf
,而不是调用String.valueOf
Comparator<JSONObject> comparator =
Comparator.<JSONObject>comparingInt(obj -> Integer.valueOf(obj.get(field)))
.reversed();
根据API的不同,您仍可能需要对String
Comparator<JSONObject> comparator =
Comparator.<JSONObject>comparingInt(obj -> Integer.valueOf((String) obj.get(field)))
.reversed();
答案 1 :(得分:-1)
是否可以避免两个valueOf?
这取决于是否知道您想要获得的field
类型,即:它是int
还是string
还是
如果是保证int
,您可以简单地执行此操作
Comparator<JSONObject> comparator = (op1,op2) -> {
return Integer.valueOf(op1.get(field)).compareTo(Integer.valueOf(op2.get(field));
};
升序
如果值为string
,则可以执行此操作
Comparator<JSONObject> comparator = (op1,op2) -> {
return Integer.parseInt((String)op1.get(field)) - Integer.parseInt((String)op2.get(field));
};