在 Java 中,我使用 TreeSet 来存储一些带有时间戳的数据点。假设有一个数据点,我们称之为 RestaurantExperience
,如下所示:
{
timestamp: <long>,
restaurant: <string>,
tasty: <boolean>
}
现在我可以使用 TreeSet 的 ceiling
和 floor
方法来查找我在给定时间有过任何体验的餐厅。不过,我对在特定时间获得“美味”体验的餐厅感兴趣。
这意味着我正在尝试查找一个靠近时间戳并且同时具有特定美味
值的数据点。我该如何去做呢?
理想情况下,我会向我的 floor
和 ceiling
方法添加一个额外的条件,但我不知道如何做。否则,是否有更适合于此的数据结构?
最佳答案
编写一个比较器,首先比较 boolean 值美味,然后比较长时间戳
int compareTo(RestaurantExperience r1, RestaurantExperience r2) {
if(r1.isTasty() == r2.isTasty()){
return Long.compare(r1.getTimestamp(), r2.getTimestamp())
else
return r1.isTasty() ? 1 : -1;
}
然后在初始化 TreeSet 时使用它。
关于具有附加条件的 Java TreeSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44680142/