记录java常用方法

记录java常用方法

1.取两个集合的差集

java 复制代码
public class StreamApiTest {

    public static void main(String[] args) {
        List<MktCamCustDetail> batchPos = Arrays.asList(
                new MktCamCustDetail("123456", 123456L, "张三"),
                new MktCamCustDetail("345678", 345678L, "王五"),
                new MktCamCustDetail("234567", 234567L, "赵六"),
                new MktCamCustDetail("123456", 123456L, "张三"));
        // 从 batchPos 中提取 objId 列表,去重后直接用于查询
        List<MktCamCustDetail> mktCamCustDetailList = Optional.ofNullable(batchPos)
                .orElse(Collections.emptyList()) // 防止 batchPos 为 null
                .stream()
                .map(MktCamCustDetail::getObjId)
                .filter(Objects::nonNull) // 避免包含 null 的 objId
                .distinct()
                .collect(Collectors.collectingAndThen(Collectors.toList(), StreamApiTest::getMktCamCustDetails));

        // 取读取到的数据与数据库中已存在的资产的差集,即新增的资产
        List<MktCamCustDetail> newMktCamCustDetailList = batchPos.stream()
                .filter(m -> mktCamCustDetailList.stream().noneMatch(m2 -> m2.getObjId().equals(m.getObjId())))
                .collect(Collectors.toList());
        System.out.println(newMktCamCustDetailList);
    }

    /**
     * 根据 objIdList 查询 MktCamCustDetail 列表
     *
     * @param objIdList
     * @return
     */
    public static List<MktCamCustDetail> getMktCamCustDetails(List<String> objIdList) {
        List<MktCamCustDetail> list = Arrays.asList(
                new MktCamCustDetail("123456", 123456L, "张三"),
                new MktCamCustDetail("345678", 345678L, "王五"),
                // new MktCamCustDetail("234567", 234567L, "赵六"),
                new MktCamCustDetail("123456", 123456L, "张三")
        );
        // 如果 objIdList 为空,直接返回空列表,避免不必要的查询
        return list;
    }
}

/**
 * MktCamCustDetail 实体类
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
class MktCamCustDetail {
    private String objId;
    private Long custId;
    private String custName;
}
相关推荐
大圣编程1 小时前
Java 多维数组详解
java·开发语言
万法若空3 小时前
【算法-查找】查找算法
java·数据结构·算法
殳翰4 小时前
下服务器端开发流程及相关工具介绍(C++)
开发语言·c++
落寞的星星4 小时前
这个对象就包含了已经转换好的DFA和各种词法分析器运转所需要的参数。下一步,我们就可以用ScannerInfo对象创建出Scanner对象,请看下面的代码:
开发语言·c#
nothing&nowhere5 小时前
用 Python 做问卷数据清洗:无效样本检测与处理实战
开发语言·python·数据清洗·数据处理·问卷星·问卷星脚本·刷问卷
2601_961593425 小时前
Rust 开发环境配置繁琐?RustRover 开箱即用搞定编码调试
开发语言·后端·macos·rust
HZZD_HZZD6 小时前
DL/T 645-2026新国标深度解读与智能电表协议适配实战:从帧结构变化到Java采集器升级的全链路改造方案
java·开发语言
多加点辣也没关系8 小时前
JavaScript|第4章:类型转换
开发语言·javascript
聪慧的水蜜桃8 小时前
【YFIOs】用C#开发硬件之设备上云
开发语言·c#