当前位置: 首页 > article >正文

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() 来处理最终结果。

http://www.kler.cn/a/518557.html

相关文章:

  • leetcode 面试经典 150 题:有效的括号
  • Linux下Ubuntun系统报错find_package(BLAS REQUIRED)找不到
  • 自签证书的dockerfile中from命令无法拉取镜像而docker的pull命令能拉取镜像
  • JJJ:Linux - 高精度定时器 hrtimer
  • 第五节 MATLAB命令
  • 攻防世界bad_python
  • 【AI日记】25.01.24
  • C++ —— 智能指针 unique_ptr (上)
  • SQL-leetcode—1164. 指定日期的产品价格
  • 【GoLang】利用validator包实现服务端参数校验时自定义错误信息
  • 星动纪元ERA-42:端到端原生机器人大模型的革命性突破
  • Excel打印技巧
  • 【2024年华为OD机试】 (E卷,200分) - 寻找符合要求的最长子串(JavaScriptJava PythonC/C++)
  • HTML入门知识
  • java+vue项目部署记录
  • css命名规范——BEM
  • Java 中的设计模式:经典与现代实践
  • 【RK3588嵌入式图形编程】-SDL2-检测和管理错误
  • web速览
  • 【MARK】Cline配合FreeAPI,再薅亿点点token
  • [央企大赛 2025] pwn
  • http的请求体各项解析
  • 【Qt 常用控件】显示类控件1(QLabel)
  • tensorflow,cuda,cudnn,pycharm安装踩坑过程记录
  • 什么时候用MPP,什么时候用TiDB?
  • PyTorch 模型 浅读