![](/img/trans.png)
[英]Java8: How to Convert Map<X, List<Y>> to Map<Y,X> using Stream?
[英]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.