【问题标题】:Set<LocalDate> contains LocalDate best practiceSet<LocalDate> 包含 LocalDate 最佳实践
【发布时间】:2018-01-30 12:36:02
【问题描述】:

我有:

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

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

我可以像这样等于LocalDate吗?

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

【问题讨论】:

  • 你试过吗? :)
  • 是的,它工作。 hollidays不是空的,我就不写怎么填了
  • 所以你回答了你的问题,案例结束

标签: java-8 set java-time localdate


【解决方案1】:

是的,你可以。

如果您查看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 日期方法 - 这意味着它可以与 HashSets 一起正常工作。

摘自hashCode() 文档:

如果两个对象根据equals(Object)方法相等,那么对两个对象中的每一个调用hashCode方法必须产生相同的整数结果。

【讨论】:

  • 两个相等的哈希值并不意味着两个对象必须相等。两个不同的日期有可能具有相同的哈希码。
猜你喜欢
  • 2019-05-02
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 2020-09-17
  • 2013-12-23
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
相关资源
最近更新 更多