23 Ağustos 2017 Çarşamba

NavigableMap Arayüzü - SortedMap Gibidir

Giriş
Şu satırı dahil ederiz
import java.util.NavigableMap;
NavigableMap aynı zamanda bir SortedMap. Kalıtım hiyerarşisi şöyle:
SortedMap <---NavigableMap<--TreeMap
Sı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. 

floorEntry (<=)
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. 


put metodu
Şöyle yaparız.
map.put(0.3, "30");
pollLastEntry
Bu metod ile en büyük elemanı almak mümkün.

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}

Hiç yorum yok:

Yorum Gönder