2013年5月16日木曜日

[Java]Mapで指定キーに近い値を得る

SortedSet<E>は、指定の値の近似値を取得することができます。APIリファレンスを見ると、似たような名前のMapがあります。 それが、SortedMap<K,V>です。
名称からSortedSet<E>と似たようなことができるんじゃないか?と思ってリファレンスを見てみると、想定通りインタフェースがありました。 確認すると、NavigableMap<K,V>というインタフェースがあり、ここに定義されていました。関係するメソッドは以下の通り。 これらを式で書いてみました。

  • lowerEntry(K key) : K < key
  • floorEntry(K key) : K <= key
  • ceilingEntry(K key) : K >= key 
  • higherEntry(K key) : K > key 
これ以外にも、先頭や最後とるとか、便利そうなメソッドが提供されています。

指定の値以上のデータをループしてとる。みたいなことをやりたい場合はこんな感じ。

    public static void main(String[] args) {

        NavigableMap<Integer, String> map = new TreeMap<Integer, String>();
        for (int i = 1; i < 10; i++) {
            int key = (int) Math.pow(2, i);
            String value = String.format("key is %d", key);
            map.put(key, value);
        }
        // [2, 4, 8, 16, 32, 64, 128, 256, 512]

        int next = 50;
        Map.Entry<Integer, String> entry;
        while ((entry = map.higherEntry(next)) != null) {
            System.out.printf("key=%d value=%s\n", entry.getKey(), entry.getKey());
            next = entry.getKey();
        }
    }

key=64 value=64
key=128 value=128
key=256 value=256
key=512 value=512

0 件のコメント: