|
1
145
使用 爪哇8 :
|
|
|
2
182
你可以简单地使用 Apache Commons Lang :
|
|
|
3
88
我将实现一个空安全比较器。可能会有一个实现,但这是如此简单的实现,我一直在滚动我自己的。 注:如果你的比较器高于 二者都 名称为空,甚至无法比较值字段。我不认为这是你想要的。 我将通过如下方式实现这一点:
编辑:修正了代码示例中的拼写错误。这就是为什么我不先测试它! 编辑:将NullSafeStringComparator提升为静态。 |
|
|
4
21
请参阅此答案的底部,了解使用guava的更新(2013)解决方案。 这就是我最终的选择。原来我们已经有了一个用于空安全字符串比较的实用方法,所以最简单的解决方案就是利用它。(这是一个很大的代码库;很容易错过这种事情:)
这是如何定义助手的方法(它被重载,以便您还可以定义空值是第一个还是最后一个,如果需要的话):
所以这基本上和 Eddie's answer (尽管我不会调用静态助手方法a 比较器 ) that of uzhin 也是。 总之,总的来说,我会非常喜欢 Patrick's solution 我认为,尽可能使用已建立的库是一个好的实践。( 了解并使用图书馆 正如JoshBloch所说),但在这种情况下,不会产生最干净、最简单的代码。 编辑(2009):Apache Commons Collections版本
实际上,这里有一种基于ApacheCommons的解决方案
我觉得这很优雅。(只剩下一个小问题:下议院
更新(2013):番石榴版本近5年后,我将如何处理我最初的问题。如果在爪哇编码,我当然会使用 Guava . (当然 不 阿帕奇公地。) 将这个常量放在某个地方,例如在“StringUtils”类中:
然后,在
当然,这几乎与ApacheCommons版本相同(两者都使用
JDK公司
CASE_INSENSITIVE_ORDER
)使用
如果你想知道
|
|
|
5
13
我总是推荐使用ApacheCommons,因为它很可能比您自己写的更好。另外,你可以做“真正的”工作,而不是重新发明。 你感兴趣的班级是 Null Comparator . 它允许您将空值设为高或低。当这两个值不为空时,您还可以使用自己的比较器。
在您的例子中,可以有一个静态成员变量来进行比较,然后
形似
} 即使您决定滚动自己的类,也要记住这个类,因为它在排序包含空元素的列表时非常有用。 |
|
|
6
7
我知道它可能不能直接回答您的问题,因为您说过必须支持空值。 但我只想指出,CompareTo中支持空值与官方描述的CompareTo合同不一致。 javadocs for Comparable :
所以我要么显式地抛出nullpointerException,要么在取消引用空参数时让它第一次被抛出。 |
|
|
7
4
您可以提取方法:
} |
|
|
8
3
你可以设计你的类是不可变的(有效Java第二ED。在这方面有一个很好的部分,第15项:最小化易变性),并且确保在构造上没有空值(并且使用 null object pattern 如果需要的话)。然后您可以跳过所有这些检查,并安全地假定值不是空值。 |
|
|
9
2
我在找类似的东西,这看起来有点复杂,所以我这样做了。我觉得这有点容易理解。您可以将它用作比较器或一条直线。对于此问题,您将更改为CompareToIgnoreCase()。实际上,空值是向上浮动的。如果你想让它们下沉,你可以翻转1,-1。
.
|
|
|
10
2
我们可以使用Java 8对对象进行空友好的比较。 假设我有一个包含两个字段的boy类:字符串名称和整数年龄,如果两个字段都相等,我想首先比较名称,然后比较年龄。
结果:
|
|
|
11
1
在使用Spring的情况下,也有一个类org.springframework.util.comparator.nullsafecomparator可以为您实现这一点。把你自己的房子装饰成这样就可以了
|
|
|
12
1
输出是
|
|
|
13
0
另一个apache objectuils示例。能够对其他类型的对象进行排序。
|
|
|
14
0
这是我用来排序数组列表的实现。空类被排序到最后一个。 对于我的情况,entityphone扩展了entityabstract,我的容器是list<entityabstract>。 “compareifnull()”方法用于空安全排序。其他方法是为了完整性,显示如何使用compareifnull。
|
|
|
15
0
对于您知道数据不会有空值的特定情况(对于字符串总是一个好主意),并且数据非常大,在实际比较值之前,您仍然要进行三次比较, 如果你确定这是你的案子 你可以稍微优化一下。YMMV作为可读代码胜过次要优化:
|
|
|
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 3 年前 |
|
|
Justin · Python自属性重命名 8 年前 |
|
|
Sabutobi · 长dict属性行的重构 8 年前 |
|
|
Falco Alexander · 简单LINQ重构/样式 8 年前 |
|
|
05bs001 · Euler 12需要优化 8 年前 |
|
|
slartidan · 如何将lambda表达式重构为方法引用? 8 年前 |
|
|
Alex · 在Java类中频繁使用与映射键相同的字符串[已关闭] 8 年前 |