判断一个集合中是否有另外一个集合中的一些元素
1、判断集合中是否包含某个元素
// 创建一个集合
ArrayList<String> one = new ArrayList<>();
one.add("a");
one.add("b");
one.add("d");
// 创建另一个集合
ArrayList<String> other = new ArrayList<>();
other.add("kk");
other.add("ab");
other.add("d");
//判断集合中是否存在某个元素
boolean contains = one.contains("a");
System.out.println("判断集合中是否存在某个元素"+contains);//true
//如果想要使用contains判断两个集合,可以使用循环,对一个集合循环其中元素然后使用contains判断元素是否在另一个集合中
2、使用releaseAll交集判断
//使用releaseAll交集判断
// boolean b = one.retainAll(other);
// System.out.println("使用releaseAll交集判断"+b);//true
// System.out.println("取交集后的集合one"+one);//[d]
// System.out.println("取交集后的集合other"+other);//[kk, ab, d]
// //结论1:把取得的交集部分放在第一个集合中。改变了原集合的值
// 创建另一个和one完全相同的集合
ArrayList<String> other1 = new ArrayList<>();
other1.add("a");
other1.add("b");
other1.add("d");
//取交集
// boolean b1 = one.retainAll(other1);
// System.out.println("使用releaseAll交集判断"+b1);//false
// System.out.println("取交集后的集合one"+one);//[a, b, d]
// //结论2:如果两个集合相同返回false
// 创建另一个完全不相同的集合
ArrayList<String> other2 = new ArrayList<>();
other2.add("aa");
other2.add("bb");
//取交集
// boolean b2 = one.retainAll(other2);
// System.out.println("使用releaseAll交集判断"+b2);//true
// System.out.println("取交集后的集合one"+one);//[]
//结论3:如果两个集合不存在交集,返回true
/**
* 1.并集
* list1.addAll(list2);
*
* 2.无重复并集
* list2.removeAll(list1);
* list1.addAll(list2);
*
* 3.交集
* list1.retainAll(list2);
*
* 4.差集
* list1.removeAll(list2);
*
*/
最总结论:两个集合部分包含、不包含的时候返回true 全部包含的时候返回false (观察one的值如果删除了就会返回true)无法完全用于判断一个集合中是否包含另一个集合中的值)
3、使用java8判断
boolean b = one.stream().anyMatch(e -> contains(other, e));
System.out.println("one的值: " + one + " ; 是否包含:" + b);//one的值: [a, b, d] ; 是否包含:true
boolean b1 = one.stream().anyMatch(e -> contains(other1, e));
System.out.println("one的值: " + one + " ; 是否包含:" + b1);//one的值: [a, b, d] ; 是否包含:true
boolean b2 = one.stream().anyMatch(e -> contains(other2, e));
System.out.println("one的值: " + one + " ; 是否包含:" + b2);//one的值: [a, b, d] ; 是否包含:false
// anyMatch:判断的条件里,任意一个元素成功,返回true
// allMatch:判断条件里的元素,所有的都是,返回true
// noneMatch:与allMatch相反,判断条件里的元素,所有的都不是,返回true
/**
* isPresent()方法用于确定此Optional实例中是否存在值。
* 如果此Optional实例中不存在任何值,则此方法返回false,否则返回true。
*
* public boolean isPresent() {
* return value != null;
* }
*/
private static boolean contains(List<String> cus, String value){
return cus.stream().filter(f -> f.equals(value)).findAny().isPresent();
}
场景2:
package com.itheima.reggie.entity;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class User {
private Long id;
private String name;
}
--
List<User> users = new ArrayList<>();
users.add(User.builder().id(1L).name("Z1").build());
users.add(User.builder().id(2L).name("Z2").build());
users.add(User.builder().id(3L).name("Z2").build());
// 创建一个集合
ArrayList<Long> one1 = new ArrayList<>();
one1.add(1L);
one1.add(2L);
boolean b3 = one1.stream().anyMatch(e -> containss(users, e));
System.out.println("one1的值: " + one1 + " ; 是否包含:" + b3);
//one1的值: [1, 2] ; 是否包含:true
}
private static boolean containss(List<User> users, long value) {
return users.stream().mapToLong(e -> e.getId()).filter(e -> e == value).findAny().isPresent();
}