我被要求为某个班级实施Comparable
或Compartor
,我们称之为V
。
假设我有V
s的集合或集合(不确定,但我认为不重要)。
V
有一种方法,可以评估它的重量",我们称之为evaluateWeight(String data)
。
您可以理解,权重取决于作为data
的参数的输入evaluateWeight
。
因此,比较取决于此参数data
。
一种解决方案可能是;添加一个包含最后一个权重计算的数据成员。 这个问题还有另一种巧妙的解决办法吗? 谢谢。
答案 0 :(得分:4)
将data
作为比较器的字段。制作比较器时将其传入。然后,当比较器完成其工作时,它可以将其传递给它所比较的所有内容的evaluateWeight
方法。
public class ComparatorWithData implements Comparator<V> {
private String data;
public ComparatorWithData(String data) {
this.data = data;
}
@Override
public int compare(V o1, V o2) {
return o1.evaluateWeight(data).compareTo(o2.evaluateWeight(data));
}
}
当然,此示例假设evaluateWeight
使用compareTo
方法返回内容。