19 Şubat 2020 Çarşamba

Maps Sınıfı

Giriş
Multimaps ile kardeştir.

difference metodu
MapDifference nesnesi döner. Bu nesneyi tek başına kullanamıyoruz. Bu nesneye ait entriesDiffering(),entriesOnlyOnLeft(),entriesOnlyOnRight(),entriesInCommon() gibi bir metodu kullanmak gerekiyor.

MapDifference.entriesDiffering() metodu
key değerleri aynı ancak value değerleri farklı olan nesneleri bir Map olarak döner.
Örnek
Şöyle yaparız
Map<String, LinkedHashMap<String, Object>> oldMap = ...;
Map<String, LinkedHashMap<String, Object>> currMap = ...;

MapDifference<String, LinkedHashMap<String, Object>> diff = 
        Maps.difference(oldMap, currMap);

Map<String, MapDifference.ValueDifference<LinkedHashMap<String, Object>>> entriesDiffering
  = diff.entriesDiffering();

MapDifference.entriesOnlyOnLeft() metodu
key değerleri sadece solda olan nesneleri bir Map olarak döner.

MapDifference.entriesOnlyOnRight() metodu
key değerleri sadece sağda olan nesneleri bir Map olarak döner.

MapDifference.entriesInCommon() metodu
key değerleri her ikisinde aynı olan nesneleri bir Map olarak döner.

Maps.difference() metodunda value nesnesinin hasCode() ve equals() metodu doğru çalışmalıdır. Value tipi array ise düzgün çalışmaz. Açıklaması şöyle.
doesn't work when the value type is array, as an array's equals() method compares identity and not the contents of the array:
Örnek
Şöyle yaparız.
Map<String, Object> leftFlatMap = ...;
Map<String, Object> rightFlatMap = ...;

MapDifference<String, Object> difference = Maps.difference(leftFlatMap, rightFlatMap);
newHashMap metodu
Şöyle yaparız.
Map<Integer, List<Integer> idMap = Maps.newHashMap();
toMap metodu
Listedeki her elemanı key yapar. Value için de belirtilen ValueSupplier metodu çağırır.

uniqueIndex metodu
Listedeki her elemanı value yapar. Key için de belirtilen KeyExtractor metodu çağırır.

Örnek
Şöyle yaparız.
Map<String,Role> mappedRoles = Maps.uniqueIndex(yourList, new Function<Role,String>() {
  public String apply(Role from) {
    return from.getName(); // or something else
  }});
Örnek
Şöyle yaparız.
private Map<String, Choice> nameMap(List<Choice> choices) {
  return Maps.uniqueIndex(choices, Choice::getName);
}

Hiç yorum yok:

Yorum Gönder