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

两个list如何根据一个list中的属性去过滤掉另一个list中不包含这部分的属性,用流实现

你可以使用Java 8的流来实现这个功能。假设你有两个包含对象的List,每个对象有一个属性,你想根据一个List中的属性值来过滤掉另一个List中不包含这个属性值的对象。下面是一种使用流的方式来实现这个功能

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;class MyClass {private String property;public MyClass(String property) {this.property = property;}public String getProperty() {return property;}
}public class Main {public static void main(String[] args) {List<MyClass> list1 = new ArrayList<>();list1.add(new MyClass("A"));list1.add(new MyClass("B"));list1.add(new MyClass("C"));List<String> list2 = new ArrayList<>();list2.add("A");list2.add("B");List<MyClass> filteredList = list1.stream().filter(obj -> list2.contains(obj.getProperty())).collect(Collectors.toList());filteredList.forEach(obj -> System.out.println(obj.getProperty()));}
}

在上面的例子中,我们有两个List:list1包含了MyClass对象,每个对象有一个属性property;list2包含了一些属性值。我们使用流来筛选list1中的对象,只保留那些property值在list2中存在的对象,最后将筛选后的结果收集到filteredList中。

输出的结果将会是:

A
B

这是根据list2中的属性值过滤掉了list1中不包含这部分属性的对象。你可以根据自己的实际需要修改代码,适应不同的数据类型和属性名称。

要是类中有很多属性那该怎么写?

如果类中有很多属性,你可以根据需要编写适合的筛选条件来过滤掉不符合要求的对象。下面是一个示例,演示了如何根据类中的多个属性进行过滤。

假设你有一个名为Person的类,该类有多个属性,包括name、age和gender。你想根据一组条件对Person对象进行过滤,这些条件包括age大于等于18,同时gender为"male"。下面是一个使用流的示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;class Person {private String name;private int age;private String gender;public Person(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}public String getName() {return name;}public int getAge() {return age;}public String getGender() {return gender;}
}public class Main {public static void main(String[] args) {List<Person> personList = new ArrayList<>();personList.add(new Person("Alice", 28, "female"));personList.add(new Person("Bob", 20, "male"));personList.add(new Person("Charlie", 25, "male"));personList.add(new Person("Diana", 16, "female"));List<Person> filteredList = personList.stream().filter(person -> person.getAge() >= 18 && person.getGender().equals("male")).collect(Collectors.toList());filteredList.forEach(person -> System.out.println(person.getName()));}
}

在上面的例子中,我们定义了一个Person类,该类有三个属性:name、age和gender。我们使用流的filter操作来对personList中的对象进行筛选,只保留那些满足age大于等于18并且gender为"male"的对象。最后,我们将筛选结果收集到filteredList中,并打印每个对象的name属性。

输出的结果将会是:

Bob
Charlie

这是根据定义的条件过滤掉了personList中不符合要求的Person对象。你可以根据自己的实际需求修改代码,添加或修改筛选条件,以适应不同的属性和值。

要是两个list中的元素对象存在多个属性。如何根据一个list中的对象的某个属性去过滤另一个集合元素?

如果两个集合中的元素对象有多个属性,并且你想要根据一个集合中的对象的某个属性值,来过滤另外一个集合中的元素,你可以使用流和条件谓词来实现。下面是一个示例代码,演示了如何根据一个集合中的对象的某个属性值,过滤另一个集合中的元素:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;class Element {private int id;private String name;public Element(int id, String name) {this.id = id;this.name = name;}public int getId() {return id;}public String getName() {return name;}
}public class Main {public static void main(String[] args) {List<Element> list1 = new ArrayList<>();list1.add(new Element(1, "A"));list1.add(new Element(2, "B"));list1.add(new Element(3, "C"));List<Element> list2 = new ArrayList<>();list2.add(new Element(1, "X"));list2.add(new Element(2, "Y"));list2.add(new Element(3, "Z"));List<Element> filteredList = list2.stream().filter(obj -> list1.stream().map(Element::getId).collect(Collectors.toList()).contains(obj.getId())).collect(Collectors.toList());filteredList.forEach(obj -> System.out.println(obj.getName()));}
}

在上面的例子中,我们有两个集合list1和list2,每个集合包含了Element对象,每个对象有两个属性:id和name。我们使用流来筛选list2中的元素,只保留那些id值在list1中存在的元素,最后将筛选后的结果收集到filteredList中。

输出的结果将会是:

X
Y
Z

这是根据list1中元素的id属性值过滤掉了list2中不包含这部分属性的元素。你可以根据自己的实际需要修改代码,适应不同的数据类型和属性名称。

要是过滤后想保留集合中的整个对象如何书写?

如果你希望在过滤后保留集合中的整个对象,而不仅仅是属性值,你可以在过滤时使用 anyMatch() 方法来判断某个属性值是否存在于另一个集合中,然后将通过判断的对象保留下来。下面是一个示例代码:

import java.util.ArrayList;
import java.util.List;class Element {private int id;private String name;public Element(int id, String name) {this.id = id;this.name = name;}public int getId() {return id;}public String getName() {return name;}
}public class Main {public static void main(String[] args) {List<Element> list1 = new ArrayList<>();list1.add(new Element(1, "A"));list1.add(new Element(2, "B"));list1.add(new Element(3, "C"));List<Element> list2 = new ArrayList<>();list2.add(new Element(1, "X"));list2.add(new Element(2, "Y"));list2.add(new Element(3, "Z"));List<Element> filteredList = new ArrayList<>();for (Element obj2 : list2) {if (list1.stream().anyMatch(obj1 -> obj1.getId() == obj2.getId())) {filteredList.add(obj2);}}filteredList.forEach(obj -> System.out.println(obj.getName()));}
}

在上面的例子中,我们有两个集合 list1 和 list2,它们包含了 Element 对象并具有相应的属性。我们通过遍历 list2 中的元素,使用 anyMatch() 方法检查该元素的 id 属性是否存在于 list1 中的任意一个元素中。如果存在,则将该对象添加到 filteredList 集合中。最后,我们打印输出 filteredList 中的元素的 name 属性。

输出的结果将会是:

X
Y
Z

这样就根据 list1 中的对象的某个属性值过滤掉了 list2 中不包含这部分属性的元素,并保留了整个对象。你可以根据具体的需求修改代码以适应不同的数据类型和属性名称。

http://www.lryc.cn/news/130415.html

相关文章:

  • Blender 混合现实3D模型制作指南【XR】
  • kubeasz在线安装K8S集群单master集群(kubeasz安装之二)
  • 『C语言』数据在内存中的存储规则
  • 基于ssm+vue的新能源汽车在线租赁管理系统源码和论文PPT
  • 深入解析IDS/IPS与SSL/TLS和网络安全
  • 在Visual Studio上,使用OpenCV实现人脸识别
  • 搭建openGauss 5.0 一主一从复制集群
  • Docker碎碎念
  • 【C++】extern
  • 2023全网Mysql 合集(25w字)附课程 从安装到高级,实战
  • 张俊林:由ChatGPT反思大语言模型(LLM)的技术精要
  • 单机编排docker compose
  • C++ 面向对象三大特性——多态
  • 相同数字的积木游戏
  • 安防监控视频云存储EasyCVR平台H.265转码功能更新:新增分辨率配置
  • 图数据库_Neo4j学习cypher语言_常用函数_关系函数_字符串函数_聚合函数_数据库备份_数据库恢复---Neo4j图数据库工作笔记0008
  • LeetCode150道面试经典题-- 加一(简单)
  • Centos7 配置Docker镜像加速器
  • 微信小程序中pdf的上传、下载及excel导出
  • Python_11 类的方法
  • CentOS系统环境搭建(一)——Centos7更新
  • Mariadb高可用MHA
  • SASS 学习笔记 II
  • 提高 Snowflake 工作效率的 6 大工具
  • 选项方式读取配置IOption、IOptionSnapshot、IOpstionMonitor的区别
  • linux基础面试题整理
  • IDEA开发项目时一直出现http404错误的解决方法
  • NLPR、SenseTime 和 NTU 加速自动视频纵向编辑
  • layui下拉框select 弹出层在最外层
  • fnn手动实现和nn实现(包括3种激活函数、隐藏层)