在同行评审期间,开发人员似乎对实施compareToBuilder解决方案感到震惊,因为我选择按3个属性进行排序。他的印象是,我班的compareTo方法会为每次比较创建过多的比较器,并且该应用程序会对性能产生巨大影响。他建议我使用BeanComparator & ComparatorUtils来链接比较器。CompareToBuilder的这种用法是否被认为效率低下?
这是我的课:
public class EmployeeComparator implements Comparator<Employee> {
@Override
public int compare(Employee o1, Employee o2) {
return new CompareToBuilder()
.append(o1.getJobTitle(), o2.getJobTitle())
.append(o1.getAge(), o2.getAge())
.append(o1.getSalary(), o2.getSalary()).toComparison();
}
这是我实现:
Collections.sort(outputRecordList, Comparator.nullsLast(new EmployeeComparator()));
不过,我真的不知道这是不是真的。我无法找到任何可能表明这会对使用链式比较器造成重大性能影响的内容。我通过Apache文档挖掘出来,看起来这是该类的一个标准实现(https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/builder/CompareToBuilder.html)。我唯一担心的是通过添加“Comparator.nullsLast”,我创建了一个怪物。
我发现这个网站在这里CompareToBulder实现:
http://www.codejava.net/java-core/collections/sorting-a-list-by-multiple-attributes-example
任何帮助或者解释为什么这是不好的做法或解释究竟CompareToBuilder做将不胜感激。
我投票结束这个问题作为题外话,因为它属于https://codereview.stackexchange.com – Flown
可以理解。我会在那里发布。 – MISMajorDeveloperAnyways