【问题标题】:Generation of child lists from a mother list从母亲列表中生成子列表
【发布时间】:2018-06-15 05:38:26
【问题描述】:

我在输入中有一个包含 N 个对象的列表,我想在女儿列表中分组同一家庭的对象。同一族中的对象共享属性“File_identifier”。最后,我想通过作为子列表对象之一的属性的键来访问这些子列表。

SentinelReportModels 是父列表

HashMap<String, List<SentinelReportModel>> hashmap = new HashMap<String, List<SentinelReportModel>>();
    for (int i = 0; i < sentinelReportModels.size(); i++) {
        for (int k = 0; k < sentinelReportModels.size(); k++) {
            if (sentinelReportModels.get(i).getIdentifiantfichier()
                    .equals(sentinelReportModels.get(k).getIdentifiantfichier()) ) {
                ArrayList<SentinelReportModel> listeTemp = new ArrayList<>();
                listeTemp.add(sentinelReportModels.get(i));
                listeTemp.add(sentinelReportModels.get(k));

                hashmap.put(sentinelReportModels.get(i).getTypeflux(),listeTemp);
            }
        }

    }

但是它不起作用,我得到了 X 个带有重复项的列表。

【问题讨论】:

  • 请给出SentinelReportModel类的定义,如果不够你发布什么,如果相同则收集idFichier但key是typeFlux
  • 每次匹配时你都会创建一个新的数组列表
  • 请在您提问时,留下一分钟,或等待提问,这是最关键的几分钟,我们不会停留数小时来回答我们的评论(您去编辑顺便说一下你的帖子)

标签: java algorithm sorting arraylist


【解决方案1】:

我相信下面的代码应该可以解决问题。基本上,将所有具有相同 Flux 的 setinels 放在一个列表中。如果通量 id 不同,则会将新列表添加到地图中。

HashMap<String, List<SentinelReportModel>> hashmap = new HashMap<String, List<SentinelReportModel>>();


hashmap.put(,listeTemp);

for (int i = 0; i < sentinelReportModels.size(); i++) {
    if (hashMap.get(sentinelReportModels.get(i).getTypeflux())==null) {


ArrayList<SentinelReportModel> list = new ArrayList<SentinelReportModel>();
  list.add(sentinelReportModels.get(i));
hashMap.put(sentinelReportModels.get(i).getTypeflux(),list);
        }else {             hashMap.get(sentinelReportModels.get(i).getTypeflux()).add(sentinelReportModels.get(i));
        }
}

【讨论】:

    【解决方案2】:

    这很容易通过标准流实现:

    子列表的组可以使用group by获取:

    Map<String, List<SentinelReportModel>> map = 
        sentinelReportModels.stream().collect(
            Collectors.groupingBy(model -> model.getIdentifiantfichier()));
    

    这将为您提供&lt;identifiantfichier, List&lt;SentinelReportModel&gt;&gt; 的地图。

    这可以作为字符串/列表映射正常处理。

    你的内部循环有一个缺陷,它没有考虑到以前的迭代可能已经为当前元素的identifiantfichier 创建了一个列表并覆盖它。

    【讨论】:

    • 我在 Java 7 中,然后我不能使用它,但感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-10-22
    • 2019-01-22
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    相关资源
    最近更新 更多