【问题标题】:Bidirectional collection in javajava中的双向收集
【发布时间】:2011-10-15 10:46:23
【问题描述】:

我有多对多关联实体信息。

我想向用户显示“学生”列表,如果用户选择一个学生,请显示他的老师。

相反,用户可以选择查看教师列表,并且他/她可以选择一位教师来查看该教师正在教的所有学生。

我希望有一个 java 集合类(java 内置或第 3 方)来表示此类数据,以便我可以根据学生查询教师,反之亦然。

Bidi 地图非常接近,但它强制执行 1:1 关系。我有多对多的关系。

有什么线索吗?

【问题讨论】:

    标签: java collections


    【解决方案1】:

    我认为你不能用地图做到这一点。最简单的方法是创建一个 Student 类和一个 Teacher 类。两者都可以有像 addTeacher(Teacher teacher) / addStudent(Student student) 这样的方法。所以每个 Student 对象都知道它是 Teachers,每个 Teacher 对象都知道它是 Student。

    【讨论】:

      【解决方案2】:

      我不确定这是否是您要查找的内容,但您可以查看Guava BiMap

      【讨论】:

      • BiMap 与 BidiMap 相同...提供 1:1 关联。
      • 我明白了,您是否考虑过尝试组合对象.. 例如Teacher 包含List<Student>Student 包含List<Teacher> 作为对象模型。
      【解决方案3】:

      这还不够吗?

      Map<Student, Set<Teacher>> studentsToTeachers;
      Map<Teacher, Set<Student>> teachersToStudents;
      

      这不是一个单一的集合,但如果你的实现是正确的,它会解决你的问题。

      【讨论】:

      • True...这就足够了,这就是我目前所做的。但是..这意味着,现在,我有 2 个集合,而且......更糟糕的是......信息在重复......studentToTeachers 将有关于教师的信息以及 TeachersToStudents。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 2014-08-18
      • 1970-01-01
      相关资源
      最近更新 更多