gpt4 book ai didi

java - 对嵌套对象执行 Collections.sort() 时如何处理空值?

转载 作者:行者123 更新时间:2023-11-30 08:57:38 24 4
gpt4 key购买 nike

在对嵌套对象执行 Collections.sort() 时,处理 null 值的最佳方法是什么?

我想对几个对象进行排序,基本上应用此规则:

@Override
public int compare(final InvoicePos invoicePosOne, final InvoicePos invoicePosTwo) {
return invoicePosOne.getInvoice().getInvoiceNo().compareTo(invoicePosTwo.getInvoice().getInvoiceNo());
}

但是,这些对象中的任何一个都可以是null(即发票位置、发票和发票编号)。

public class InvoicePos {
private Invoice invoice = null;

// ...
}

public class Invoice {
private String invoiceNo = "";

// ...
}

我是否对我的所有对象都进行了显式 null 检查,或者是否有一种编写更少的方法?


澄清一下:我知道我上面的例子可能会引发 NullPointerExceptions。目前我正在做以下事情,基本上,我问自己是否有更聪明的方法。

     Collections.sort(allInvoicePositions, new Comparator<InvoicePos>() {
@Override
public int compare(final InvoicePos invoicePosOne, final InvoicePos invoicePosTwo) {
if (null == invoicePosOne && null == invoicePosTwo) {
return 0;
}

if (null == invoicePosOne) {
return -1;
}

if (null == invoicePosTwo) {
return 1;
}

if (null == invoicePosOne.getInvoice() && null == invoicePosTwo.getInvoice()) {
return 0;
}

if (null == invoicePosOne.getInvoice()) {
return -1;
}

if (null == invoicePosTwo.getInvoice()) {
return 1;
}

if (null == invoicePosOne.getInvoice().getInvoiceNo() && null == invoicePosTwo.getInvoice().getInvoiceNo()) {
return 0;
}

if (null == invoicePosOne.getInvoice().getInvoiceNo()) {
return -1;
}

if (null == invoicePosTwo.getInvoice().getInvoiceNo()) {
return 1;
}

return invoicePosOne.getInvoice().getInvoiceNo().compareTo(invoicePosTwo.getInvoice().getInvoiceNo());
}
});

最佳答案

在 org.apache.commons.collections.jar 中有一个叫做 NullComparator 的东西。

这可能对您有帮助 https://commons.apache.org/proper/commons-collections/javadocs/api-2.1.1/org/apache/commons/collections/comparators/NullComparator.html .

关于java - 对嵌套对象执行 Collections.sort() 时如何处理空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28048176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com