我有一个自定义范围 (~ Collection
),它有 2 个Temporal
边界 (from
和to
),并且可以通过使用给定的递增来及时枚举这 2 个边界之间的所有值TemporalUnit incrementUnitType
。
private final Temporal_ from;
private final Temporal_ to;
private final TemporalUnit incrementUnitType; // For example Month, Day, Minute, ...
在其中,我需要实现一个 contains 方法,以检查遍历该范围是否包含特定值。例如,如果它包含 8 March。这是我想编写该方法的方式:
public boolean contains(Temporal_ value) {
...
if (from.until(value, incrementUnitType) < 0
|| value.until(to, incrementUnitType) <= 0) {
return false; // Out of bounds
}
// This doesn't work because 1-MAR + 1 month doesn't include 8-MAR
return true;
}
这里有几个迭代:
- 从 - 到 (incrementUnitType)
- 3 月 1 日 - 4 月 10 日(1 天): 3 月 1 日、3 月 2 日、3 月 3 日、3 月 4 日、...、4 月 8 日、4 月 9 日
- 3 月 1 日 - 4 月 10 日(1 周):3 月 1 日、3 月 8 日、3 月 15 日、3 月 22 日、3 月 29 日、4 月 5 日
- 3 月 1 日 - 4 月 10 日(1 个月):3 月 1 日、 4 月 1 日
在最后一种情况下,上面的代码将不正确地返回 8-MAR 的 true。for
通过执行循环并检查每个可能的值,这是我需要编写该代码才能工作的方式:
public boolean contains(Temporal_ value) {
...
if (from.until(value, incrementUnitType) < 0
|| value.until(to, incrementUnitType) <= 0) {
return false; // Out of bounds
}
// This works but it kills scalability
for (long i = 0; i < getSize(); i++) {
Temporal_ temporal = get(i);
if (value.equals(temporal)) {
return true;
}
}
return false;
}
这是一个可扩展性问题。有什么办法可以避免吗?