2017-03-13 32 views
2

我有多重映射,我想將它切成使用上鍵兩個謂詞兩個不同的地圖:的Java:切片番石榴多重映射

A -> keyPred1(K) -> A_1 
A -> keyPred2(K) -> A_2 

在我這樣做讓所有值的瞬間,用過濾它keyPred1/keyPred2和重建從屈德寧一遍值:

values1 = a.entries().stream() 
       .filter(e -> keyPred1(e.getKey())) 
       .collect(Collectors.toList()); 

a1 = rebuildMapFromValues(values1); 

這沒關係,但還是看起來有點笨重。有沒有辦法以更聰明的方式解決問題?

+2

https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/collect/Multimaps.html#filterKeys-com.google.common.collect。 Multimap-com.google.common.base.Predicate- –

+0

@JBNizet獲得100%滿意答案! –

回答

1

您可以通過使用Multimaps.filterKeys(Multimap, Predicate)得到過濾多重映射生活意見:

Multimap<K, V> a1 = Multimaps.filterKeys(a, key -> keyPred1(key)); 
Multimap<K, V> a2 = Multimaps.filterKeys(a, key -> keyPred2(key)); 

如果你不想生活意見,那麼你可以篩選視圖複製到自己的多重映射實例。例如:

Multimap<K, V> a1 = HashMultimap.create(Multimaps.filterKeys(a, key -> keyPred1(key))); 
Multimap<K, V> a2 = HashMultimap.create(Multimaps.filterKeys(a, key -> keyPred2(key)));