Bu yöntem işe istiyorum nasıl bağlıdır. Örneğin, map
A değildir keys
elements) sadece göz ardı edilmelidir veya B) verilen değerler, koleksiyonunda null
olarak temsil gereken veya C) bir hata olmalıdır? Ayrıca canlı bir görünüm ya da değerleri içeren ayrı bir koleksiyon isteyip istemediğinizi de düşünün.
A için, benim tercih olacaktır:
Collection<V> values = Collections2.transform(
Collections2.filter(keys, Predicates.in(map.keySet()),
Functions.forMap(map));
Bu harita çok daha büyük olsa bile, haritadaki aslında ve de nispeten verimli olmalıdır tuşlar için değerlere sonucu sınırlar İstediğiniz anahtarlardan daha. Elbette, bu sonucu ne yapmak istediğinize bağlı olarak başka bir koleksiyona kopyalamak isteyebilirsiniz.
B için, Functions.forMap(map, null)
dışında @Michael Brewer-Davis'in çözümünü kullanırsınız.
C için, öncelikle map.keySet().containsAll(keys)
olmadığını kontrol edin ve ardından @Michael Brewer-Davis'in çözümünü kullanmak false
ederseniz bir hata ... ama sonra başka bir koleksiyona sonucu kopyalanan sürece farkında olmak isterdim map
'dan bir girdiyi kaldırmak, bir noktada iade edilen koleksiyonu kullanarak kod için IllegalArgumentException
neden olabilir.
Eğer gerçekten bir harita yerine arka değerlerin bir Koleksiyonu almak istiyor musunuz? Bunu inşa sürecinde, anahtarlar ve değerler arasındaki ilişkiyi kaybedersiniz. –