Giriş
Şu satırı dahil ederiz
import java.util.NavigableMap;
NavigableMap aynı zamanda bir SortedMap. Kalıtım hiyerarşisi şöyle:
SortedMap <---NavigableMap<--TreeMapSıralı Anahtarlar
Elemenalar sıralı tutulur
; key->value
10->A
15->B
20->C
Bu yüzden anahtar değerleri küçükten büyüğe dolaşmak mümkün.Örnek
Bir metodun %30 diğerini %70 çalışmasını istiyoruz. Random sınıfı < 0.3 üretirse bir metodu çalıştırırız. [0.3 - 1.0) arasında bir değer üretirse başka bir metodu çalıştırırız..Şöyle yaparız.
NavigableMap<Double, Runnable> runnables = new TreeMap<>();
runnables.put(0.3, this::30PercentMethod);
runnables.put(1.0, this::70PercentMethod);
double percentage = Math.random();
for (Map.Entry<Double, Runnable> entry : runnables){
if (entry.getKey() < percentage) {
entry.getValue().run();
break; // make sure you only call one method
}
}
Kullanılan metodlar NavigableSet ile aynı anlama geliyor. Aralarındaki tek fark NavigableMap metodları Entry kelimesi ile biterler, yani xxxEntry şeklinde olurlar.Bu sınıf <,<=,>,>= şeklinde liste veya tek eleman sorgulama imkanı tanır.
constructor
Şöyle yaparız.
NavigableMap<Double, Runnable> map = new TreeMap<>();
ceilingEntry (>= )
Verilen elemandan büyük eşit olan en küçük eleman alınır. Şöyle yaparız
NavigableMap<Float, String> neededMap = new TreeMap<Float, String>();
neededMap.put(1.0f, "first!");
neededMap.put(3.0f, "second!");
System.out.println(neededMap.ceilingEntry(2.0f));//"3.0=second!" verir
ceilingKey (>= )
Verilen anahtar değerden büyük eşit olan en küçük anahtar alınır.
Verilen değerden küçük eşit olan en büyük eleman alınır. Şöyle yaparız
private static <K, V> V mappedValue(TreeMap<K, V> map, K key) {
Entry<K, V> e = map.floorEntry(key);//<= koşullunu sağlayanı ara
if (e == null && e.getValue() == null) {//Eleman varsa, değeri null ise
e = map.lowerEntry(key);//< koşulunu sağlayan en büyük elemanı bul
}
return e == null ? null : e.getValue();
}
floorKey (<=)
Verilen değerden küçük eşit olan en büyük anahtar alınır.
headMap metodu (<)
Entry yerine SortedMap döner
lowerKey (<) metodu
Verilen değerden küçük eşit olan en büyük anahtar alınır.
lowerValue (<) metodu
Verilen değerden küçük eşit olan en büyük eleman alınır.
tailMap metodu (>=)
Entry yerine SortedMap döner
Örnek
Elimizde şöyle bir kod olsun
TreeMap<Integer, Integer> map = new TreeMap<>();
map.put(1,1);
map.put(2,2);
map.put(3,3);
System.out.println("map: " + map);
Map<Integer, Integer> fromMap = map.tailMap(2);
Çıktı olarak şunu alırız
map: {1=1, 2=2, 3=3}
fromMap: {2=2, 3=3}