java good practice on basic function

本文介绍了一种在Java中对包含空值的集合进行排序的方法,通过使用Comparator接口的comparing方法并结合nullsFirst选项,确保排序过程中不会出现空指针异常(NPE)。示例代码展示了如何对Student对象列表按名称排序,并正确处理名称为null的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合排序要避免NPE

public class CompareTest {

    private List<Student> studentList;

    @Before
    public void initStudents() {
        studentList = new ArrayList<>();

        studentList.add(new Student(5, null));
        studentList.add(new Student(2, null));
        studentList.add(new Student(1, "A"));
        studentList.add(new Student(0, "a"));
        studentList.add(new Student(3, "B"));
        studentList.add(new Student(4, "d"));
    }

    @Test
    public void testOrder(){

        // 第一个参数是个Function函数接口,要返回要比较排序的字段,这里要根据stdudent.name比较排序
        // 第二个参数是个Comparator接口, 是比较器,定义了比较两个对象进行排序的方法,
        // 这里表示根据name自然顺序排序,如果name为空,排在前面
        Comparator c = Comparator.comparing(Student::getName, Comparator.nullsFirst(Comparator.naturalOrder()));
        studentList.sort(c);
        Assert.assertNull(studentList.get(0).getName());
        Assert.assertEquals(studentList.get(0).getId(), Integer.valueOf(5));
        Assert.assertNull(studentList.get(1).getName());
        Assert.assertEquals(studentList.get(1).getId(), Integer.valueOf(2));

        boolean occurNpe = false;
        try {
            // comparing 一定要设置第二个参数,否则如果name为空,会抛出空指针
            c = Comparator.comparing(Student::getName);
            studentList.sort(c);
            System.out.println(studentList);
        }catch (NullPointerException e){
            occurNpe = true;
        }
        assert  occurNpe;
    }

核心在于这里,当name=null时,排在前面,相应的,还存在Comparator.nullsLast方法。

Comparator c = Comparator.comparing(Student::getName,Comparator.nullsFirst(Comparator.naturalOrder()));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值