繁体   English   中英

提高自定义比较器代码质量

[英]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();

.get返回类型

另外,您应该调查obj.get(field)返回的类型。 如果幸运的话,可以像打字一样简单:

Comparator<JSONObject> comparator = 
    Comparator.<JSONObject>comparingInt(obj -> (Integer) obj.get(field))
    .reversed();

返回类型为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();

是否有可能避免两个valueOf?

这取决于是否知道您尝试获取的field类型,即:是int还是string或者是

如果它是一个有保证的int你可以简单地做到这一点

Comparator<JSONObject> comparator = (op1,op2) -> {
     return Integer.valueOf(op1.get(field)).compareTo(Integer.valueOf(op2.get(field));
};

升序

如果value是一个string您可以这样做

Comparator<JSONObject> comparator = (op1,op2) -> {
     return Integer.parseInt((String)op1.get(field)) - Integer.parseInt((String)op2.get(field));
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM