我有一个多图,我想使用键上的两个谓词将它切成两个不同的图:

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);


可以,但看起来仍然有些笨拙。有没有办法以更智能的方式解决问题?

最佳答案

您可以使用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)));

08-26 23:28