【问题标题】:Get predecessor key from map using java使用java从地图中获取前任键
【发布时间】:2017-11-26 06:43:16
【问题描述】:

我这里有一张地图

    TreeMap<Integer, Float> matrixMap = new TreeMap<Integer, Float>();

结果

{12=0.4, 24=0.63, 36=0.86, 48=1.12, 60=1.39, 72=1.67, 84=1.98, 96=2.31, 108=3.3, 120=3.84, 132=4.4, 144=5.0, 156=5.62, 168=6.28, 180=6.97, 192=7.34, 
204=7.74, 216=8.15, 228=8.07, 240=8.33}

现在,我想获取键 25 的值。理想情况下,25 在结果中不可用。所以,我想得到 24 和 36 的值。

duration  = 25

我可以得到36的值,但是怎么才能得到36的前身呢。

for(Map.Entry<Integer, Float> entry : matrixMap.entrySet()) {
    if(duration  < entry.getKey())
    {
        max = entry.getValue();
        break;
    }

}

如何也获得直接的前任值(在这种情况下为 24 键)?

任何想法

【问题讨论】:

    标签: java iterator treemap


    【解决方案1】:

    获取第一个键的值 >= 25:

    matrixMap.tailMap(25).values().next()
    

    或:

    matrixMap.get(matrixMap.tailMap(25).firstKey())
    

    获取第一个键的值

    matrixMap.get(matrixMap.headMap(25).lastKey())
    

    【讨论】:

      【解决方案2】:

      我已经使用以下方式解决了。

      int above = matrixMap.ceilingKey(duration);
      int below = matrixMap.floorKey(duration);
      logger.info("above="+above+", below="+below);
      min = insuranceMatrixMap.get(below);
      max = insuranceMatrixMap.get(above);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-23
        • 2021-03-17
        • 1970-01-01
        • 2014-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多