【问题标题】:Java: List<List<String>> list = new ArrayList<>();Java: List<List<String>> list = new ArrayList<>();
【发布时间】:2017-10-25 16:46:44
【问题描述】:

如何将包含相同确切值的列表中的所有列表分组。

List<List<String>> list = new ArrayList<>();

此列表包含 list1 list2 list3 等...... 如果没有检查 list3.get(0) 等,我想查找 list1.get(0) 是否与 list2.get(0) 相同... 稍后,如果我在每个列表中找到相同的值,我需要对列表进行分组。 例如如果 true 将 list1 和 list3 以及其他找到的添加到

  List<List<String>> list2 = new ArrayList<>();

现在检查 list2.get(0) 是否等于其他如果是则将它们分组并将它们添加到另一个:

   List<List<String>> list3 = new ArrayList<>();

我目前取得的成就:

    private static void findEqualLists(List<List<String>> list) {

    int i = 0;
    for (List<String> list1 : list) {
        if (!Collections.disjoint(list1, list.get(i))) {
            System.out.println(list1.get(0)+list.get(i).get(0));
        }else{
            System.out.println(list1.get(0)+list.get(i).get(0));
        }
        i++;
    }
}

值示例:

list = {{2017-02,jhon,car},{2017-03,maria,car},{2017-03, boy, car}, {2017-01,arya, car}, {2017-02, girl, car}}

输出:

Group1:
2017-03,maria,car
2017-03, boy, car

Group2:
2017-02,jhon,car
2017-02, girl, car

Group3
2017-01,arya, car

【问题讨论】:

  • 1.问题是什么? 2.“分组”列表是什么意思? 3. 与其谈论如何你正在做某事,不如讨论什么你想要实现的目标。
  • 我想通过给予价值来实现outpoot
  • “相似”和“分组”定义不明确:您是否仅按日期“分组”?再一次 - “分组”是什么意思?
  • “我想通过给予价值来实现前哨” -- 你能翻译一下吗? :-)

标签: java arrays list


【解决方案1】:

你想要Collectors.groupingBy:

private static Map<String, List<List<String>>>
            findEqualLists(List<List<String>> list) {

    return list.stream().collect(Collectors.groupingBy(l -> l.get(0)));
}

返回的 Map 将使用 l.get(0) 作为唯一键,每个对应的值都是仅包含第一个元素与该键匹配的列表的列表。

【讨论】:

  • 我如何能够像上面显示的那样输出返回的地图?
  • @D1 调用地图的 values() 方法。您可以直接打印返回的 Collection,或者,如果您想要大括号 ({ }) 而不是括号 ([ ]),您可以循环遍历 Collection 并自己构建一个字符串。跨度>
  • 是的,我知道我可以使用 values() 方法,但是如何分组并单独打印呢?我的意思是一个键现在有多个值,我是否需要遍历每个键,然后遍历该键列表以获取该特定键的值?
  • @D1 的 One key 有多个值,因为原始 List 中有多个条目以“2017-03”开头。您不需要遍历键;您可以简单地遍历已经分组的values()。 Map 的重点是values() 的每个成员都对应一个键。
  • 是的,它会被分割,但我不明白你怎么知道那个组什么时候结束,另一个开始形成?
猜你喜欢
  • 2014-07-22
  • 2017-05-08
  • 2013-03-27
  • 1970-01-01
  • 2019-03-15
  • 2014-01-09
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多