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ırMap.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