簡體   English   中英

如何獲得List <Y> 來自地圖 <X,Y> 通過提供List <X> 使用谷歌收藏?

[英]How to get List<Y> from Map<X,Y> by providing List<X> using google collection?

我有一個Map<X, Y>List<X> ,我想通過提供List<X>Map<X, Y>提取值,這將導致List<Y> 一種方法是

List<X> keys = getKeys();  
Map<X, Y> map = getMap();  
List<Y> values = Lists.newArrayListWithCapacity(keys.size());  
for(X x : keys){  
   values.add(map.get(x));  
}

現在我需要使用Predicate或其他東西刪除值( List<Y> )中的空值。 有更好的方法嗎?
谷歌館藏庫中沒有這種方法有什么好的理由嗎?

像這樣的東西:

List<Y> values = Lists.newArrayList(
    Iterables.filter(
        Lists.transform(getKeys(), Functions.forMap(getMap(), null), 
        Predicates.notNull()));

axtavt的答案相同的概念,但使用FluentIterable (順序讀取而不是從里到外讀取):

List<Y> values = FluentIterable
    .from(keys)
    .transform(Functions.forMap(map, null))
    .filter(Predicates.notNull())
    .toList();

鑒於您的確切要求, @ axtavt的答案可能是最有效的。 如果您的密鑰List是一個Set ,那么這樣的東西將是我的偏好:

List<Y> values = Lists.newArrayList(
    Maps.filterKeys(getMap(), Predicates.in(getKeys())).values());

我認為這樣做的一種特殊方法不是在番石榴中,因為它通常不夠用。 另外,正如您所看到的,有很多方法可以組合Guava為實現這一目標而提供的功能。 Guava專注於提供構建模塊,具有非常常見的特定操作方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM