两个集合使用流 + Lambda表达式进行多项操作
定义两个Integer类型的集合list1和list2,我们使用Lambda表达式进行多项操作:
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(1);
list1.add(2);
list1.add(4);
list1.add(5);
List<Integer> list2 = new ArrayList<>();
list2.add(1);
list2.add(1);
list2.add(4);
list2.add(5);
list2.add(6);
交集:
List<Integer> union = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());
System.out.println("我们得到list1 - list2的并集:");
union.forEach(System.out::println);
差集:list1 - list2
List<Integer> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
System.out.println("我们得到list1 - list2的差集:");
reduce1.forEach(System.out::println);
差集:list2 - list1
List<Integer> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());
System.out.println("我们得到list2 - list1的差集:");
reduce2.forEach(System.out::println);
并集:list1 + list2
List<Integer> collect = list1.parallelStream().collect(Collectors.toList());
collect.addAll(list2.parallelStream().collect(Collectors.toList()));
System.out.println("我们得到list1 + list2的并集:");
collect.forEach(System.out::println);
并集【去重复值】
List<Integer> distinct = collect.stream().distinct().collect(Collectors.toList());
System.out.println("我们得到list1 + list2的去重并集:");
distinct.forEach(System.out::println);
以上的流操作均不影响我们的原来的两个集合数据,因为流只是一次性的,而且不会对我们的元数据进行操作:
System.out.println("list1:");
list1.forEach(System.out::println);
System.out.println("==============================================================");
System.out.println("list2:");
list2.forEach(System.out::println);
全部代码以及输出结果如下所示:
package com.feng.Java编程技巧点;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* Created by FengBin on 2021/8/12 15:00
* 使用Lambda表达式进行两个List集合的多项操作
*/
public class mergeTwoLists {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(1);
list1.add(2);
list1.add(4);
list1.add(5);
List<Integer> list2 = new ArrayList<>();
list2.add(1);
list2.add(1);
list2.add(4);
list2.add(5);
list2.add(6);
//我们使用stream流的方式 + lambda表达式实现两个集合的多种操作
//1. 交集
List<Integer> union = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());
System.out.println("我们得到list1 - list2的并集:");
union.forEach(System.out::println);
System.out.println("==============================================================");
//2.差集【list1 - list2】
List<Integer> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
System.out.println("我们得到list1 - list2的差集:");
reduce1.forEach(System.out::println);
System.out.println("==============================================================");
//3.差集【list2 - list1】
List<Integer> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());
System.out.println("我们得到list2 - list1的差集:");
reduce2.forEach(System.out::println);
System.out.println("==============================================================");
//4. 并集【list1 + list2】
List<Integer> collect = list1.parallelStream().collect(Collectors.toList());
collect.addAll(list2.parallelStream().collect(Collectors.toList()));
System.out.println("我们得到list1 + list2的并集:");
collect.forEach(System.out::println);
System.out.println("==============================================================");
//5. 去重并集
List<Integer> distinct = collect.stream().distinct().collect(Collectors.toList());
System.out.println("我们得到list1 + list2的去重并集:");
distinct.forEach(System.out::println);
System.out.println("==============================================================");
//6.因为流是一次性的,对我们的元数据并不会进行修改
System.out.println("list1:");
list1.forEach(System.out::println);
System.out.println("==============================================================");
System.out.println("list2:");
list2.forEach(System.out::println);
}
}
输出结果:
我们得到list1 - list2的并集:
1
1
4
5
==============================================================
我们得到list1 - list2的差集:
2
==============================================================
我们得到list2 - list1的差集:
6
==============================================================
我们得到list1 + list2的并集:
1
1
2
4
5
1
1
4
5
6
==============================================================
我们得到list1 + list2的去重并集:
1
2
4
5
6
==============================================================
list1:
1
1
2
4
5
==============================================================
list2:
1
1
4
5
6