首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Comparator.nullsLast不会避免NullPointerException

Comparator.nullsLast不会避免NullPointerException
EN

Stack Overflow用户
提问于 2018-11-15 15:15:32
回答 3查看 11.9K关注 0票数 26

我想按一个可以为空的字段对对象列表进行排序。

为了避免NullPointerexception,我使用了Comparator.nullsLast。但仍会出现例外情况:

代码语言:javascript
复制
public class Test {

    public static void main(String[] args) {
        List<Bean> l = new ArrayList<>();
        for (int i=0;i<5;i++) {
            Bean b = new Bean("name_"+i,i);
            l.add(b);
        }
        l.get(2).setVal(null);
        System.out.println(l);
        Collections.sort(l, Comparator.nullsLast(Comparator.comparing(Bean::getVal)));
        System.out.println(l);
    }

    static class Bean{
        String name;
        Integer val;
        // omit getters & setters & constructor
    }

}

如何对这种列表进行排序?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-15 16:31:19

您应该使用Comparator.nullsLast两次:

代码语言:javascript
复制
list.sort(nullsLast(comparing(Bean::getVal, nullsLast(naturalOrder()))));

  • First nullsLast将处理Bean对象为空的情况。
  • Second nullsLast将处理Bean::getVal的返回值为空的情况。

如果您确定列表中没有任何Holger值,那么您可以省略第一个nullsLast (如@holger值所示):

代码语言:javascript
复制
list.sort(comparing(Bean::getVal, nullsLast(naturalOrder())));
票数 58
EN

Stack Overflow用户

发布于 2018-11-15 15:28:41

您可以使用:

代码语言:javascript
复制
Collections.sort(l, Comparator.comparing(Bean::getVal,
                              Comparator.nullsLast(Comparator.naturalOrder())));
票数 10
EN

Stack Overflow用户

发布于 2020-12-24 15:27:58

您可以查看此示例

代码语言:javascript
复制
@Override
public int compare(Example o1, Example o2) {
  if (o1 == null && o2 == null) return 0;
  if (o1 == null) return -1;
  if (o2 == null) return 1;
 return Comparator.comparing(Example::getSta,
      Comparator.nullsLast(Comparator.naturalOrder()))
      .thenComparing(Example::getId,
          Comparator.nullsLast(Comparator.naturalOrder()))
      .compare(o1, o2);
}

class Example {
String sta; Long id;}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53314193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档