网站首页 > 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类)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)