list对象获取最大的日期

当列表中的日期可能为空时,可以使用 Optional 来处理空值。通过 lambda 获取最大日期时,需要确保在比较日期时考虑到 null 值。可以通过过滤掉 null 值或者在比较时进行处理来避免 NullPointerException

解决方案:

可以使用 filter 来过滤掉 null 日期,或者在比较时使用 Comparator.nullsLast() 来确保 null 日期被认为是最小的。这样可以避免 null 值带来的问题。

以下是一个包含可能为 null 的日期字段的示例:

示例代码:

import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

class Employee {
    String name;
    LocalDate dateOfJoining;

    public Employee(String name, LocalDate dateOfJoining) {
        this.name = name;
        this.dateOfJoining = dateOfJoining;
    }

    public LocalDate getDateOfJoining() {
        return dateOfJoining;
    }

    @Override
    public String toString() {
        return name + ": " + dateOfJoining;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Employee> employees = Arrays.asList(
            new Employee("Alice", LocalDate.of(2020, 1, 15)),
            new Employee("Bob", LocalDate.of(2021, 5, 10)),
            new Employee("Charlie", null), // 日期为 null
            new Employee("David", LocalDate.of(2022, 3, 25))
        );

        // 获取最大日期,null值被认为是最小的
        Optional<Employee> latestEmployee = employees.stream()
                .filter(e -> e.getDateOfJoining() != null) // 过滤掉日期为空的员工
                .max((e1, e2) -> e1.getDateOfJoining().compareTo(e2.getDateOfJoining()));

        // 如果有最大日期,则打印出来
        latestEmployee.ifPresent(employee -> System.out.println("Employee with latest date of joining: " + employee));
    }
}

解释:

  1. filter(e -> e.getDateOfJoining() != null):首先,使用 filter 来过滤掉 dateOfJoiningnullEmployee 对象,这样在比较时就不会遇到 null 值。
  2. max():通过 e1.getDateOfJoining().compareTo(e2.getDateOfJoining()) 来找出最大日期(最晚的日期)。由于我们已经过滤掉了 null 值,所以不会遇到 NullPointerException
  3. Optional<Employee>max() 返回一个 Optional,用 ifPresent() 来确保存在最大日期时输出该员工。

如果希望 null 被视为最小值:

可以通过 Comparator.nullsLast()Comparator.nullsFirst() 来处理 null 值,这样即使日期为空,代码仍然能正确工作:

Optional<Employee> latestEmployee = employees.stream()
    .max(Comparator.comparing(Employee::getDateOfJoining, Comparator.nullsLast(LocalDate::compareTo)));

输出:

Employee with latest date of joining: David: 2022-03-25
  • 如果日期为 null,可以通过过滤掉这些日期或者使用 Comparator.nullsLast() 来确保 null 被视为最小值或不参与比较。
  • 使用 Optional 来避免 NullPointerException,并通过 ifPresent() 来处理最终结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值