You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Set<List<String>>按规则逐元素比对并统计出现次数的实现问题

实现方案

前置说明

  • 由于原始结构Set<List<String>>本身是无序集合,无法明确「排在当前List之后的List」的顺序,因此第一步需要先将Set转为有序的List<List<String>>结构,你可以根据业务需要指定排序规则,示例中我们默认按Set的迭代顺序转为有序列表。

步骤1:剔除每个List的首个元素

你可以通过List.subList()方法直接截取首个元素之后的部分,无需额外自定义提取函数,同时保留每个子列表的顺序上下文:

// 原始数据
Set<List<String>> originalSet = new HashSet<>();
originalSet.add(Arrays.asList("A", "B", "C", "D", "E"));
originalSet.add(Arrays.asList("A", "B", "C", "D", "F"));
originalSet.add(Arrays.asList("G", "K", "P", "C"));
originalSet.add(Arrays.asList("Z", "C", "R", "D"));
originalSet.add(Arrays.asList("F", "Z", "U"));

// 预处理:剔除每个List首元素,同时转为有序列表
List<List<String>> processedList = originalSet.stream()
        .map(list -> list.size() > 1 ? list.subList(1, list.size()) : Collections.emptyList())
        .collect(Collectors.toList());

处理后的processedList就对应你给出的示例结果,且保留了原集合的顺序关系。

步骤2:按规则统计重叠次数

我们使用Map<Integer, Integer>存储最终统计结果,key为重叠次数,value为对应次数的计数:

Map<Integer, Integer> countMap = new HashMap<>();
int size = processedList.size();

// 遍历每个List(索引为i)
for (int i = 0; i < size; i++) {
    List<String> currentList = processedList.get(i);
    // 遍历当前List的每个元素
    for (String element : currentList) {
        int appearTimes = 0;
        // 遍历排在当前List之后的所有List(索引j > i)
        for (int j = i + 1; j < size; j++) {
            List<String> laterList = processedList.get(j);
            // 统计当前元素是否在后续List中出现
            if (laterList.contains(element)) {
                appearTimes++;
            }
        }
        // 对应重叠次数的计数+1,不需要统计出现0次的场景可以加if判断
        if (appearTimes > 0) {
            countMap.put(appearTimes, countMap.getOrDefault(appearTimes, 0) + 1);
        }
    }
}

如果你需要统计的是元素在后续所有List中的总出现次数(即同一个后续List里出现多次就计数多次),只需要把内层判断替换为appearTimes += Collections.frequency(laterList, element)即可。

结果验证

以你给出的示例数据为例,最终统计结果可以直接通过countMap获取,比如你提到的第一个List的元素B,在后续4个List中仅第2个List出现,重叠次数为1,因此countMap中key为1的计数会加1,符合你的需求。


内容的提问来源于stack exchange,提问作者kaganndemirr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:42:02