查找list集合的交集和差集操作
public class Test4 {
public static void main(String[] args) {
ArrayList<VIP> arrayList = new ArrayList<VIP>(Arrays.asList(
new VIP("1","zhang",true),
new VIP("2","lisi",false),
new VIP("3","wangwu",true)
));
ArrayList<VIP> arrayList1 = new ArrayList<>(Arrays.asList(
new VIP("2","lisi",false),
new VIP("4","lisi",true),
new VIP("5","sisd",false),
new VIP("6","wang",true)
));
/**
* 两集合的交集
*/
List<VIP> vips = arrayList
.stream() //获取第一个集合的stream1流
.filter( //取出stream1中符合条件的元素组成新的stream2
a -> //lambda表达式1,a为lambda表达式的参数,是stream1的每个参数
arrayList1.stream() //获取第二个集合的stream2
.map(VIP::getId) //将第二个集合的每个元素的id属性取出来,映射成新的stream3
.anyMatch( //返回值(boolean),stream3中是否至少有一个元素是stream表达式2返回true
id -> //lambda表达式2,id为lambda表达式2的参数,是stream流的每个元素
Objects.equals(a.getId(), id) //判断id的值是否为真
)
).collect(Collectors.toList()); //将stream2转为list集合
System.out.println("ArrayList和ArrayList2的交集:"+vips);
/**
* 两集合的交集
*/
List<VIP> vips2 = arrayList
.stream() //获取第一个集合的stream1流
.filter( //取出stream1中符合条件的元素组成新的stream2
b -> //lambda表达式1,a为lambda表达式的参数,是stream1的每个参数
arrayList1.stream() //获取第二个集合的stream2
.map(VIP::getId) //将第二个集合的每个元素的id属性取出来,映射成新的stream3
.noneMatch( //返回值(boolean),stream3中是否至少有一个元素是stream表达式2返回true
id -> //lambda表达式2,id为lambda表达式2的参数,是stream流的每个元素
Objects.equals(b.getId(), id) //判断id的值是否为真
)
).collect(Collectors.toList()); //将stream2转为list集合
System.out.println("ArrayList和ArrayList2的差集:"+vips2);
}
}