当前位置: 首页 > article >正文

Java 8使用Stream流去除一个list中包含另一个list已存在的某个字段的对象

项目场景:

  在Java中,我们经常会遇到需要对List中的数据进行操作的情况。有时候,我们需要从一个List中删除另一个List已经包含的数据。这种情况下,我们可以使用Java Stream来简洁高效地完成操作。


代码示例

假设我们有两个对象列表,我们需要从第一个列表中移除第二个列表中已存在的某个字段的对象。

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
class Item {
    private String id;
    private String name;
 
    // 构造函数、getter和setter省略
 
    public String getId() {
        return id;
    }
}
 
public class Main {
    public static void main(String[] args) {
        List<Item> list1 = new ArrayList<>(); // 假设这是第一个列表
        List<Item> list2 = new ArrayList<>(); // 假设这是第二个列表
 
        // 填充数据
        list1.add(new Item("1", "Item 1"));
        list1.add(new Item("2", "Item 2"));
        list1.add(new Item("3", "Item 3"));
 
        list2.add(new Item("2", "Item 2")); // 假设我们要去除list1中包含id为"2"的Item
 
        // 使用stream API去除list1中包含list2的id的元素
        List<Item> filteredList1 = list1.stream()
                .filter(item1 -> list2.stream().noneMatch(item2 -> item2.getId().equals(item1.getId())))
                .collect(Collectors.toList());
 
        // 打印结果
        filteredList1.forEach(item -> System.out.println(item.getId() + " - " + item.getName()));
    }
}

在这个例子中,我们创建了两个Item对象的列表。然后我们使用stream()方法来处理这些列表,并使用filter()方法来移除那些其id字段存在于第二个列表中的元素。我们使用noneMatch()方法来检查第二个列表中是否不存在与当前列表1中元素匹配的id。最后,我们使用collect()来收集结果。 


扩展:

使用Java 8的Stream API来去除一个列表中存在于另一个列表的元素

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class ListDifference {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));
 
        // 去除list1中存在于list2的元素
        List<Integer> difference = list1.stream()
                .filter(e -> !list2.contains(e))
                .collect(Collectors.toList());
 
        System.out.println(difference); // 输出: [1, 2]
    }
}

这段代码会输出list1中那些不在list2中的元素。这里使用了filter操作来排除那些存在于list2的元素,并最终通过collect操作将结果收集到一个新的列表中。 


http://www.kler.cn/a/449237.html

相关文章:

  • 京东大数据治理探索与实践 | 京东零售技术实践
  • Android基于Path的addRoundRect,Canvas剪切clipPath简洁的圆角矩形实现,Kotlin(1)
  • 汽车IVI中控开发入门及进阶(47):CarPlay开发
  • 【Mac】安装 PaddleOCR
  • leetcode hot100除自身以外的数组的乘积
  • Android 常用布局
  • 基于空间状态方程的车辆行驶控制系统simulink建模与仿真,对比前馈控制和PI反馈控制
  • 序列任务中的位置信息编码方法综述:原因、方法及适用场景
  • 前端组件设计:从封装到复用的最佳实践
  • Pytorch | 从零构建EfficientNet对CIFAR10进行分类
  • VLAN之间通讯
  • 用C语言实现线程池
  • 大数据实验三
  • 从0到1搭建 Android 自动化 python+appium 环境
  • MAE 随机掩码自编码器:高掩码率 + 非对称编码器-解码器架构,解决视觉数据冗余特征、计算冗余消除
  • web3跨链预言机协议-BandProtocol
  • 基于java的改良版超级玛丽小游戏
  • Python:基础语法
  • 每日一题(4)
  • R语言中vegan软件包使用教程
  • Zookeeper的选举机制
  • JVM对象分配内存如何保证线程安全?
  • leetcode 2295.替换数组中的元素
  • ElasticSearch 使用教程
  • 绿色环保木塑复合材料自动化生产线设计书
  • 【Maven】如何解决Maven循环依赖?