网站首页 > java教程 正文
在日常的开发工作中,我们经常会遇到需要对两个或多个List集合进行操作的需求,比如求两个列表的交集、并集、差集以及去重后的并集。这些操作在Java 8中变得非常简单,借助于流(Stream)API和集合类的新特性,我们可以轻松实现。下面将通过示例代码来展示如何使用Java 8来完成这些任务。
准备工作
首先,我们需要定义一个简单的Product类作为我们的数据模型:
java
深色版本
1public class Product {
2 private String name;
3 private double price;
4
5 // 构造函数
6 public Product(String name, double price) {
7 this.name = name;
8 this.price = price;
9 }
10
11 // Getter 和 Setter 方法
12 public String getName() {
13 return name;
14 }
15
16 public void setName(String name) {
17 this.name = name;
18 }
19
20 public double getPrice() {
21 return price;
22 }
23
24 public void setPrice(double price) {
25 this.price = price;
26 }
27
28 @Override
29 public boolean equals(Object o) {
30 if (this == o) return true;
31 if (o == null || getClass() != o.getClass()) return false;
32 Product product = (Product) o;
33 return Double.compare(product.price, price) == 0 &&
34 Objects.equals(name, product.name);
35 }
36
37 @Override
38 public int hashCode() {
39 return Objects.hash(name, price);
40 }
41
42 @Override
43 public String toString() {
44 return "Product{" +
45 "name='" + name + '\'' +
46 ", price=" + price +
47 '}';
48 }
49}
创建List集合
假设我们有两个List<Product>,分别表示不同的产品集合:
java
深色版本
1List<Product> list1 = Arrays.asList(
2 new Product("Apple", 1.0),
3 new Product("Banana", 0.5),
4 new Product("Cherry", 2.0)
5);
6
7List<Product> list2 = Arrays.asList(
8 new Product("Banana", 0.5),
9 new Product("Cherry", 2.0),
10 new Product("Durian", 3.0)
11);
求交集
要找出两个列表中的共同元素,可以使用stream()结合filter()方法,并且用collect(Collectors.toList())收集结果:
java
深色版本
1List<Product> intersection = list1.stream()
2 .filter(list2::contains)
3 .collect(Collectors.toList());
求并集
合并两个列表可以使用Stream.concat()方法:
java
深色版本
1List<Product> union = Stream.concat(list1.stream(), list2.stream())
2 .distinct() // 去重
3 .collect(Collectors.toList());
求差集
找出在第一个列表中但不在第二个列表中的元素:
java
深色版本
1List<Product> difference = list1.stream()
2 .filter(p -> !list2.contains(p))
3 .collect(Collectors.toList());
去重并集
如果想要得到两个列表的并集并且去除重复项,我们已经在并集的步骤中实现了这一点:
java
深色版本
1List<Product> distinctUnion = union; // 已经是去重的并集
结论
通过上述方法,我们可以很方便地在Java 8中处理集合的交集、并集、差集以及去重并集问题。这对于数据处理和逻辑实现提供了很大的便利。当然,在实际项目中,根据具体需求可能还需要考虑性能优化等问题。
猜你喜欢
- 2024-11-02 java中判断list不为空的工具类(java list 判断空)
- 2024-11-02 java 集合类之List(二)(java中集合类有哪些)
- 2024-11-02 面试官问线程安全的List,看完再也不怕了
- 2024-11-02 Java List集合遍历数据的八种方式
- 2024-11-02 Java代码更高效地遍历List(java怎么遍历list)
- 2024-11-02 java集合框架(List集合的特有功能概述和测试)
- 2024-11-02 Java中List 和 Map、Set 的区别(java中list,set,map的区别)
- 2024-11-02 java集合List接口(java集合linkedlist)
- 2024-11-02 Java 17 List 接口详解(java list 排序)
- 2024-11-02 Java 的 ArrayList(java的arraylist类)
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)