我想知道有什么更好的方法可以在大的 SortedMap 中找到大于输入值的第一个值,而不是在下面的示例中循环遍历所有值。或者,如果 SortedMap 是用于此目的的最佳结构。

这可以使用 google-collections 来实现吗?
提前致谢

public class mapTest {
public static void main(String[] args) {

SortedMap<Double, Object> sortedMap = new TreeMap<Double, Object>();
    sortedMap.put(30d, "lala");
    sortedMap.put(10d, "foo");
    sortedMap.put(25d, "bar");
    System.out.println("result: " + findFirstValueGreaterThan(sortedMap, 28d));
}

public static Object findFirstValueGreaterThan(SortedMap<Double, Object> sortedMap, Double value) {
    for (Entry<Double, Object> entry : sortedMap.entrySet()) {
        if (entry.getKey() > value) {
            // return first value with a key greater than the inputted value
            return entry.getValue();
        }
    }
    return null;
}
}

最佳答案

这一切都在文档中:

ceilingKey(K key)
Returns the least key greater than or equal to the given key, or null if there is no such key.


所以,

findFirstValueGreaterThan(sortedMap, 28d)

应该
sortedMap.ceilingKey(28d)

但是,请注意“大于”和“大于或等于”之间的区别。

关于java - 查找大于 SortedMap 的第一个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3740292/

10-13 02:39