记录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;
}
相关推荐
yq198204301156几秒前
静思书屋:基于Java Web技术栈构建高性能图书信息平台实践
java·开发语言·前端
一个public的class2 分钟前
你在浏览器输入一个网址,到底发生了什么?
java·开发语言·javascript
有位神秘人3 分钟前
kotlin与Java中的单例模式总结
java·单例模式·kotlin
Jinkxs4 分钟前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin
&有梦想的咸鱼&4 分钟前
Kotlin委托机制的底层实现深度解析(74)
android·开发语言·kotlin
golang学习记8 分钟前
IntelliJ IDEA 2025.3 重磅发布:K2 模式全面接管 Kotlin —— 告别 K1,性能飙升 40%!
java·kotlin·intellij-idea
爬山算法11 分钟前
Hibernate(89)如何在压力测试中使用Hibernate?
java·压力测试·hibernate
消失的旧时光-194334 分钟前
第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
java·redis·缓存
BD_Marathon34 分钟前
设计模式——依赖倒转原则
java·开发语言·设计模式
BD_Marathon38 分钟前
设计模式——里氏替换原则
java·设计模式·里氏替换原则