我正在尝试使用比较器来帮助排序对象列表。我对比较器的工作原理和以下示例中它将要做什么有疑问:
private static Comparator<Student> comparator()
{
return (Student a, Student b) ->
{
return Integer.compare(complexOperation(a), complexOperation(b));
}
}
如您所见,需要根据 complexOperation()
方法返回的整数排名来比较和排序学生。正如其名称所示,这是一个繁重的操作。上述方法是否最有效?或者最好基本上通过遍历要排序的列表中的每个学生,对每个学生执行 complexOperation()
并将结果存储在 Student 对象的字段中。然后比较器会执行:
Integer.compare(a.getRank(), b.getRank())
这两种方法是否可以相互比较,或者由于比较器的工作方式(可能会多次将同一对象与其他对象进行比较,因此在比较期间每个学生都会运行complexOperation()多次),在学生字段中进行complexOperation()结果的预计算是否更快?
以上代码可以按如下方式调用:
Collections.sort(students, comparator());
希望这很清楚! 编辑: 假设为了简便,无法向学生对象添加字段(这是一个玩具问题,真正的情况更加复杂,我没有权利修改学生对象)。是否仍然最好创建一个自定义对象,其中包含一个带有另一个字段的学生,而不是在比较器中直接执行复杂操作(complexOperation())?或者还有其他方法来解决这个问题吗?我可以想到创建一个Hashmap,以学生ID作为键,以复杂操作(complexOperation())的结果作为值,并在比较器中创建/访问该记录。