Java 查找最小值(昨天,最大值(上次登录,迁移日期))

Java 查找最小值(昨天,最大值(上次登录,迁移日期)),java,java-stream,optional,Java,Java Stream,Optional,我只能想到用两条流来做这件事。有更好的办法吗 LocalDate lastLoginOrMigrationDate = Stream.of(lastLogin, migrationdate) .filter(Objects::nonNull) .max(Comparator.comparing(LocalDate::toEpochDay)).orElse(yesterday); return Stream.of(lastLoginOrMi

我只能想到用两条流来做这件事。有更好的办法吗

LocalDate lastLoginOrMigrationDate = Stream.of(lastLogin, migrationdate)
            .filter(Objects::nonNull)
            .max(Comparator.comparing(LocalDate::toEpochDay)).orElse(yesterday);

    return Stream.of(lastLoginOrMigrationDate, yesterday)
            .min(Comparator.comparing(LocalDate::toEpochDay)).orElse(yesterday);

在我看来,您可以从.max中获取生成的可选项,并通过.isBefore(昨天)对其进行过滤。如果流为空,则昨天早于lastLogin和migrationDate的最大值,否则,结果将是它们的最大值

LocalDate result = Stream.of(lastLogin, migration)
            .filter(Objects::nonNull)
            .max(Comparator.comparing(LocalDate::toEpochDay))
            .filter(max -> max.isBefore(yesterday))
            .orElse(yesterday);

问题->为什么要使用
toEpochDay
进行比较,而不是使用compareTo?

Joda时间库使事情变得简单?你试过使用它吗?使用第三方库。@VikramPalakurthi在使用java.time api时,为什么要使用旧的JodaTime?“Joda Time是Java SE 8之前的Java事实上的标准日期和时间库。现在要求用户迁移到Java.Time(JSR-310)。”在写下我的答案后,刚刚意识到您提到了同样的事情。感谢您的快速回答。我接受了@Sneh的答案,因为它有代码。但是我把你的答案投了高票,所以你还是得到了一些分数:)谢谢你的快速回复。是的,关于compareTo的好问题。我想我唯一的借口是因为现在是星期五,而我的大脑已经开始了周末。