【问题标题】:How to group duplicate item keys如何对重复的项目键进行分组
【发布时间】:2021-09-24 23:03:34
【问题描述】:

我有一张地图,我想将此地图分组到一个列表中,其中包含重复项的键,如下所示。

地图:{1=a, 2=b, 3=a, 4=b, 5=c, 6=b, 7=a}

预期结果:[[1,3,7], [2,4,6], [5]]

我尝试下面的代码,它给出 [[1=a, 3=a, 7=a], [2=b, 4=b, 6=b], [5=c]] 但我不想要价值观。

val list1 = map.entries.groupBy {
        it.value
    }.values.toList()


    println(list1)

【问题讨论】:

  • 您期望的输出究竟是什么?为什么不使用不允许重复的数据结构?结果正是您编写代码的方式。
  • @Stultuske 表示输出为预期结果:[[1,3,7], [2,4,6], [5]]。我只想要数组中相同项目的键。不想删除重复项,所以没有使用数据结构。

标签: android dictionary kotlin


【解决方案1】:

你可以这样做:

Map<Object,List<Object>> resultMap = map.entrySet().stream().collect(Collectors.groupingBy(
            Map.Entry::getValue,Collectors.mapping(Map.Entry::getKey, Collectors.toList())));
    
    System.out.println(resultMap.values());
    

【讨论】:

  • 这个没问题,但是android有api级别的限制。
【解决方案2】:

需要添加valueTransform函数

val list = map.entries.groupBy({ it.value }, { it.key }).values.toList()

【讨论】:

  • 这看起来更干净。 ?
  • values 返回一个Collection,所以如果你不关心具体的列表,你可以放弃toList()
猜你喜欢
  • 2013-03-12
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 2022-01-14
  • 2020-02-18
相关资源
最近更新 更多