java-8 - Set<LocalDate> 包含 LocalDate 最佳实践

标签 java-8 set java-time localdate

我有:

ZoneId gmt = ZoneId.of("GMT");
LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDateNow = localDateTime.toLocalDate();

Set<LocalDate> hollidays = new HashSet<>();

我可以像这样等于 LocalDate 吗?

if(hollidays.contains(localDateNow)){
...
}

最佳答案

是的,可以。

如果您查看 LocalDate::equals() 实现,您将能够看到:

int compareTo0(LocalDate otherDate) {
    int cmp = (year - otherDate.year);
    if (cmp == 0) {
        cmp = (month - otherDate.month);
        if (cmp == 0) {
            cmp = (day - otherDate.day);
        }
    }
    return cmp;
}

这看起来像是一个正确实现的日期equals方法 - 这意味着它可以与HashSet一起正常工作。

摘自 hashCode() 文档:

If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result.

关于java-8 - Set<LocalDate> 包含 LocalDate 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45813991/

相关文章:

java - 计算 map - 将元素添加到现有列表或创建新列表并添加到它

java - OptionalInt 是否可重用?

java - Guava Sets.intersection 性能不佳

由 java.time.Instant 的 MIN/MAX 生成的 java.sql.Timestamp 的行为与由 Long.MIN_VALUE/Long.MAX_VALUE 构造时的行为不同

Java老年代一直在增长,直到Tomcat重启

calendar - 如何创建每月 30 天的银行日历

c++ - 剥离项目的最佳 C++ 容器?

algorithm - 如何编写最大集打包算法?

java - 在 getString 中转换 localDate 时出错

java - 从 Instant 和 ZoneId 形成 ZonedDateTime 时的预期行为是什么?