我正在编写一些自定义比较器,并且希望它们将空项目推到列表的底部,而不管我是对升序还是对降序排序。解决这个问题的最佳策略或模式是什么?
副手:
还有其他策略吗?我想听听使用不同方法的经验,以及各种策略的陷阱。
最后一个选择对我很有吸引力。比较器非常好地链接在一起。特别是,您可能希望同时编写ReverseComparator和NullWrappingComparator。
ReverseComparator
NullWrappingComparator
编辑:您不必自己编写。如果您查看Google收藏库中的Ordering类,您会发现它以及其他各种好东西:)
编辑:进入更多细节以显示我的意思ReverseComparator…
一个警告的词-在a的实现中ReverseComparator,颠倒参数的顺序,而不是求反,否则Integer.MIN_VALUE将“颠倒”自身。
Integer.MIN_VALUE
所以这个实现是错误的(假设original比较器要反向):
original
public int compare(T x, T y) { return -original.compare(x, y); }
但这是正确的:
public int compare(T x, T y) { return original.compare(y, x); }
原因是,我们总是希望扭转比较,但如果original.compare(x, y)回报率int.MIN_VALUE,那么坏的比较器将 还 回int.MIN_VALUE,这是不正确。这是由于那个有趣的特性int.MIN_VALUE == -int.MIN_VALUE。
original.compare(x, y)
int.MIN_VALUE
int.MIN_VALUE == -int.MIN_VALUE