7 Temmuz 2020 Salı

Map Arayüzü

computeIfAbsent metodu - Null Dönemez
Java 8 ile geldi.  Bizi key değeri var/yok kontrolü yaptığımız if kontrolünden kurtarır. Aranan değer mevcut değilse Map'e yeni bir nesne ekler ve onu döner. value olarak null kabul etmez. Kod olarak şuna benzer.
if (map.get("key") == null) {
    map.put("key",new ValueClass());
}
Örnek - ArrayList
Şöyle yaparız.
List<Bar> bars = itemsByFoo.computeIfAbsent(key, x -> new ArrayList<>());
bars.add(someNewBar);
Örnek - ArrayList
Daha kısa kodlama için şöyle yaparız.
hmap.computeIfAbsent(key, k -> new ArrayList<>())
    .add(s);
Örnek - HashMap
Şöyle yaparız.
allClients.computeIfAbsent(id, key -> new HashMap<>())
  .put(date, invoice);
forEach metodu
Java 8 ile geldi. Örnek ver

get metodu
Bu metod generic değil.
Örnek
Elimizde şöyle bir kod olsun.
Map<String, Integer> myHashMap = new HashMap<String, Integer>();
Key tipimiz String olmasına rağmen şöyle yapabiliriz.
myHashMap.get(1L);
getOrDefault metodu
Java 8 ile geldi. Açıklaması şöyle. Aranan değer mevcut değilse Map'i değiştirmeden bir nesne elde ederiz. Bu metod yerine çoğunlukla computeIfAbsent() tercih ediliyor.
getOrDefault is suitable if you want to use a stand-in for an absent value without modifying the map.
Örnek
Şöyle yaparız.
Map<Foo, List<Bar>> itemsByFoo = ...
List<Bar> bars = itemsByFoo.getOrDefault(key, new ArrayList<>());
Örnek
Elimizde şöyle bir kod olsun. Bu kodda getOrDefault() yerine computeIfAbset() çağrısı yapmak daha iyi.
List<String> list = hmap.getOrDefault(key,new ArrayList<String>());
list.add(s);
hmap.put(key,list);
ofEntries metodu - Parametre Olarak Map.entry Alır
Map.ofEntries metodu yazısına taşıdım

of metodu - 
Map.of metodu yazısına taşıdım

putIfAbsent metodu - Eski Value Değerini Verir, Yani Null Dönebilir
Java 8 ile geldi. Aranan değer mevcut değilse Map'e yeni bir nesne ekler ve null döner. Eğer mevcutsa value nesnesini döner. Value olarak null kabul eder. Default gerçekleştirim şöyle. Metodun içi direkt Java standardında tanımlı
default V putIfAbsent(K key, V value) {
  V v = get(key);
  if (v == null) {
    v = put(key, value);
  }

  return v;
}
Açıklaması şöyle.
The default implementation makes no guarantees about synchronization or atomicity properties of this method. Any implementation providing atomicity guarantees must override this method and document its concurrency properties.
Şöyle okuması daha kolay.
ValueClass value = new ValueClass();
if (map.get("key") == null) {
    map.put("key",value);
}
replaceAll metodu
Java 8 ile geldi. Value nesnesinin değiştirilmesine izin verir.
Örnek
Şöyle yaparız. Value olarak kullanılan Set'i HashSet ile değiştirir.
Map<Integer,Set<Object>> map = new HashMap<>();
map.put(5, Collections.emptySet());
map.put(10, Collections.singleton("foo"));

map.replaceAll((key, set) -> new HashSet<>(set));
Örnek
Şöyle yaparız.
Map<String, Double> adjustedMap = new HashMap<>(someMap);
adjustedMap.replaceAll ((k,v) -> v != null ? 2*v : null);
values metodu
Örnek ver

Hiç yorum yok:

Yorum Gönder