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

如何从list2中计算与list1的差集并忽略list2元素末尾的日期后缀?

实现方案

核心思路

  • 先将list1转为HashSet结构,将文件名查找时间复杂度从O(n)降低到O(1),大幅提升大批量数据的处理效率
  • 遍历list2的每个元素,以:::为分隔符拆分字符串,取第一段内容去除首尾空白后得到纯文件名
  • 筛选出纯文件名不在list1对应的HashSet中的元素,即为所需的差集结果

代码实现

Java 8+ 流式写法(推荐)

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class DiffCalculation {
    public static void main(String[] args) {
        // 初始化示例集合
        List<String> list1 = new ArrayList<>();
        list1.add("1/ce/a6/5a/1cea65ab9260df8d55fb29ce0df570d4.jpg");
        list1.add("1/ce/a6/5a/1cea65ab9260df8d55fb29ce0df570d3.jpg");
        list1.add("1/ce/a6/5a/1cea65ab9260df8d55fb29ce0df570d6.jpg");

        List<String> list2 = new ArrayList<>();
        list2.add("1/ce/a6/5a/1cea65ab9260df8d55fb29ce0df570d1.jpg ::: 2021-09-17T17:07:52Z");
        list2.add("1/ce/a6/5a/1cea65ab9260df8d55fb29ce0df570d2.jpg ::: 2021-09-17T17:07:52Z");
        list2.add("1/ce/a6/5a/1cea65ab9260df8d55fb29ce0df570d3.jpg ::: 2021-09-17T17:07:52Z");

        // list1转为Set用于快速查找
        Set<String> fileNameSet = new HashSet<>(list1);

        // 筛选差集
        List<String> diffResult = list2.stream()
                .filter(item -> !fileNameSet.contains(item.split(":::")[0].trim()))
                .collect(Collectors.toList());

        // 验证输出
        diffResult.forEach(System.out::println);
    }
}

低版本Java兼容写法(Java 7及以下)

Set<String> fileNameSet = new HashSet<>(list1);
List<String> diffResult = new ArrayList<>();
for (String item : list2) {
    String fileName = item.split(":::")[0].trim();
    if (!fileNameSet.contains(fileName)) {
        diffResult.add(item);
    }
}

运行结果

上述示例代码运行后,最终输出的差集内容为:

1/ce/a6/5a/1cea65ab9260df8d55fb29ce0df570d1.jpg ::: 2021-09-17T17:07:52Z
1/ce/a6/5a/1cea65ab9260df8d55fb29ce0df570d2.jpg ::: 2021-09-17T17:07:52Z

符合需求:文件名和list1重合的d3.jpg对应的条目已被剔除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:18:05