您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java中的双向多值映射

Java中的双向多值映射

因此,你需要多对多关系的支持吗?你可以得到的最接近的是Guava,Multimap就像@Mechkov所写的-但更具体地讲是Multimap与组合Multimaps.invertFrom“ BiMultimap”尚未实现,但在Google Guava库中请求此功能时存在问题。

此时,你有几种选择:

如果你的“ BiMultimap”将变为不可变常量,请使用Multimaps.invertFrom和ImmutableMultimap/ ImmutableListMultimap/ ImmutableSetMultimap(这三个中的每个都有不同的集合存储值)。一些代码(示例取自我开发的应用程序,使用EnumSets.immutableEnumSet):

public class RolesAndServicesMapping {
    private static final ImmutableMultimap<Service, Authority> SERVICES_TO_ROLES_MAPPING = 
         ImmutableMultimap.<Service, Authority>builder()
            .put(Service.SFP1, Authority.ROLE_PREMIUM)
            .put(Service.SFP, Authority.ROLE_PREMIUM)
            .put(Service.SFE, Authority.ROLE_EXTRA)
            .put(Service.SF, Authority.ROLE_STANDARD)
            .put(Service.SK, Authority.ROLE_STANDARD)
            .put(Service.SFP1, Authority.ROLE_ADMIN)
            .put(Service.ADMIN, Authority.ROLE_ADMIN)
            .put(Service.NONE, Authority.ROLE_DENY)
            .build();

    // Whole magic is here:
    private static final ImmutableMultimap<Authority, Service> ROLES_TO_SERVICES_MAPPING =
            SERVICES_TO_ROLES_MAPPING.inverse();
    // before guava-11.0 it was: ImmutableMultimap.copyOf(Multimaps.invertFrom(SERVICES_TO_ROLES_MAPPING, HashMultimap.<Authority, Service>create()));

    public static ImmutableSet<Authority> getRoles(final Service service) {
        return Sets.immutableEnumSet(SERVICES_TO_ROLES_MAPPING.get(service));
    }

    public static ImmutableSet<Service> getServices(final Authority role) {
        return Sets.immutableEnumSet(ROLES_TO_SERVICES_MAPPING.get(role));
    }
}

如果你确实希望Multimap是可修改的,那么除非同时进行修改kToVMultimapinvertFrom每次都想调用其反向副本(并且使该副本不可修改),否则很难同时维护K-> VV-> K变体。以确保你不小心不修改vToKMultimap不会更新的内容kToVMultimap)。这不是最佳选择,但在这种情况下应该这样做。

(可能不是你的情况,提到了额外的好处):BiMap接口和实现类具有在之后.inverse()提供BiMap 视图的 方法。如果我之前提到的这个 问题解决了,它可能会有类似的情况。 BiMap<K, V>biMap.inverse().inverse()

总体而言,common.graph支持以下品种的图形:

java 2022/1/1 18:20:40 有497人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶