【问题标题】:Java: slicing guava multimapJava:切片番石榴多图
【发布时间】:2017-03-13 12:33:48
【问题描述】:

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

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

没关系,但看起来还是有点笨重。有没有办法以更智能的方式解决问题?

【问题讨论】:

标签: java guava multimap


【解决方案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)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2012-04-13
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多