我正在使用这个example来玩比较链。但它只是显示了一种对这些对象进行排序的方法。
public class Fruit implements Comparable<Fruit> {
private String name;
private String family;
private int calories;
@Override
public int compareTo( Fruit otherFruit ) {
return ComparisonChain.start()
.compare( name, otherFruit.name )
.compare( family, otherFruit.family )
.compare( calories, otherFruit.calories )
.result();
}
}
我现在想知道是否可以根据最终用户的需求进行排序。如果排序标准没有修复,我将如何实施?例如。有人想先按名称排序,然后按卡路里进行排序。下一个想要按家庭排序,然后按卡路里排序,然后按名称排序。等等。人们可能也想要降序而不是升序。
有人可以给我一些如何解决的提示吗?
答案 0 :(得分:1)
Comparable
应该实现一种比较方式。允许更改它实际上违反了Comparable
的合同,这要求所有sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
和x
(引用Javadoc)y
。如果您可以更改单个Fruit
个对象使用的比较,则可以让对象x
表示它大于y
,而y
表示它大于{{1} }}, 等等。想象一下,如果你有一个x
包含的对象,每个对象都配置为使用不同的排序顺序...尝试排序该列表只会是混乱而不会产生任何有用的东西。
如果您想要多种替代排序方式,请创建List<Fruit>
以实现上述每种方式,并以某种方式将其公开给用户。然后可以将单个Comparator
传递给sort方法(或Comparator
构造函数,或其他),确保所有比较都使用该逻辑。