提高自定义比较器代码质量
Improve custom comparator code quality
写这个比较器有什么更好的方法吗?
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
?
使用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();
Return .get
类型
或者,您应该调查 obj.get(field)
returns 的类型。如果幸运的话,它可以像类型转换一样简单:
Comparator<JSONObject> comparator =
Comparator.<JSONObject>comparingInt(obj -> (Integer) obj.get(field))
.reversed();
Return 类型是 String
如果您总是从 obj.get
得到 Strings
,那么您应该能够直接使用 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();
Is it possible to avoid the two 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));
};
写这个比较器有什么更好的方法吗?
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
?
使用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();
Return .get
类型
或者,您应该调查 obj.get(field)
returns 的类型。如果幸运的话,它可以像类型转换一样简单:
Comparator<JSONObject> comparator =
Comparator.<JSONObject>comparingInt(obj -> (Integer) obj.get(field))
.reversed();
Return 类型是 String
如果您总是从 obj.get
得到 Strings
,那么您应该能够直接使用 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();
Is it possible to avoid the two 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));
};