【问题标题】:Multimap of Multimap Java - Categorize timetableMultimap Java的Multimap - 分类时间表
【发布时间】:2015-03-01 22:23:03
【问题描述】:

我已经解析了一个 HTML 时间表并将每个主题加载到我的类对象中。 所以我有我的主题的数组列表,其中包含姓名、老师、...、小时和日期的信息 现在我想重建表格,所以我需要先对其进行分类。我认为最好的结构是这样的:

Monday: 1: Math, Czech, ...
        2: History
        ...
Tuesday: 1: English, Geo
         2...
...

在给定的时间内可以有多个主题,因此我尝试使用 Multimap 的 Multimap,但我无法在我的解析过程中声明它。

Multimap<String, Multimap<String, Subject>> timetable = HashMultimap.create();
...
for ...
    timetable.put(subject.den, new HashMultimap<>(subject.hod, subject));

但它说 HashMultimap 具有私有访问权限 com.google.common... 我不知道如何正确写这个。我也在考虑使用数组,但我必须预先声明它,我想在一个循环中构建它。 有任何想法吗?提前谢谢你

【问题讨论】:

    标签: java object arraylist hashmap multimap


    【解决方案1】:

    看起来你想要的实际上更像是Map&lt;String, Multimap&lt;String, Subject&gt;&gt;,在这种情况下你想要

     Map<String, Multimap<String, Subject>> timetable = new HashMap<>();
     for ...
       Multimap<String, Subject> multimap = timetable.get(subject.den);
       if (multimap == null) {
         multimap = HashMultimap.create();
         timetable.put(subject.den, multimap);
       }
       multimap.put(subject.hod, subject);
    

    【讨论】:

    • 我爱你,伙计!这完全符合我的预期!我对此还有一个问题。我现在如何在某些键上提取对象的属性?假设我需要周一第一个小时的对象名称。我希望能像 timetable.get("Monday").get("1")[1].name 这样找到它,但我不确定如何准确输入,因为这不起作用
    • 什么意思?那个地方可以有几个主题。您可以通过写Collection&lt;Subject&gt; subjects = timetable.get("Monday").get("1") 来获取它们。
    • 是的,我的意思是如果可以仅提取例如当天给定时间教授的第一门学科的属性。也许一些速记可以一步完成?或者我必须每次都进行临时收集并设置可迭代以找到它?
    • “制作临时集合”是什么意思?您不是在制作副本,而是将引用存储在变量中;那很便宜。如果你愿意,你可以写subjects.iterator().next()
    • 啊,不知道只是做个参考。非常感谢您的所有帮助,您为我省去了很多挫折!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多