当前位置: 首页 > 面试题库 >

Java中的双向多值映射

吕文林
2023-03-14
问题内容

我正在寻找一种存储键值对的方法。我需要双向查询,但同时我需要为同一个键存储多个值。换句话说,类似于BidiMap,但是对于每个键,可以有多个值。例如,它需要能够保存以下对:“ s1”-> 1,“ s2”-> 1,“ s3”-> 2,并且我需要能够将值映射到每个键,并且对于每个值,获取与其关联的所有键。


问题答案:

因此,你需要多对多关系的支持吗?你可以得到的最接近的是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支持以下品种的图形:

  • 有向图
  • 无向图
  • 具有相关值(权重,标签等)的节点和/或边
  • 不允许/不允许自循环的图形
  • 不允许/不允许平行边的图(具有平行边的图有时称为多图)
  • 节点/边按插入顺序排列,排序或无序的图


 类似资料:
  • 我的实体如下所示: 我的问题是: 为什么会这样,即使在我添加食谱和房子之间的联系之前没有发生? 我怎样才能修好它? 原因是什么?

  • 1. 前言 通过本节课程的学习,你将发现关联对象之间的微妙关系。相信这种关系对你更深入地认识 HIbernate 有很大的帮助。 通过本节课程,你将了解到: 多对多双向关联映射中哪一方是关系维系者; 级联操作与关系维系者。 2. 关系维系者 新学期开始了,同学们选择了各自喜欢的课程,现在为学生添加选修课程的任务就要落在 Hibernate 的身上。一起来看看 Hibernate 是如何完成这个任务

  • 问题内容: 我正在努力进行双向多对多映射,其中顺序在一侧很重要,而在另一侧则不重要。 我有两节课:程序和学生。 一个程序有很多学生,顺序很重要。 程序A 约翰 莎莉 赛斯 程式B 亚历克斯 赛斯 艾米 约翰 一个学生有很多程序,但是顺序在这里并不重要。 John 程序A 程序B 莎莉 程序A 赛斯 程序A 程式B 亚历克斯 程式B 艾米 程式B 因此,似乎我可以在程序和学生之间建立双向的多对多关联

  • 下面的例子中,我有一个单独的域层和一个单独的持久层。我使用Mapstruct进行映射,当从域映射到实体或从实体映射到域时,会出现堆栈溢出,因为双向引用总是被调用- 用于映射的类非常基本

  • 我有两张桌子。后 和喜欢 在这些对象之间进行hibernate注释映射,以便在类似于Post bean的。。。。 就像豆子一样 问题 该关联是否由Post{@OneToOne}和like{@ManyToOne}正确? 获取类型是Lazy,但仍然得到依赖循环。为什么? 尝试 要删除依赖关系循环,我尝试了 {@xmltransive} {@JsonIgnore} {@JsonManagedRefere

  • 1. 前言 本节课程和大家一起聊聊一对多关联映射。通过本节课程,你将了解到: 如何实现一对多关联映射; 如何实现双向一对多关联映射; 关联映射中的级联操作。 2. 一对多关联映射 关系型数据库中表与表中的数据存在一对多(或多对一)关系。 如学生表、班级表。一个班级有多个学生,多个学生可以在同一个班级。 一对多或多对一本质上是一样的,如同一块硬币的正面和反面,只是看待事物的角度不同而已。 数据库中有