首先创建一个实体类
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
@Data
@AllArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = -1L;
@ApiModelProperty(value = "名字")
private String name;
@ApiModelProperty(value = "年龄")
private Integer age;
@ApiModelProperty(value = "区域")
private String region;
}
1、在Java 8中,可以使用Stream
API来判断对象集合中多个字段是否唯一
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class TestMain {
public static void main(String[] args) {
isUnique();
}
/**
* 判断对象集合中多个字段是否重复
*/
private static void isUnique() {
List<User> users = getUser1();
boolean isUnique = users.stream()
.collect(Collectors.groupingBy(p -> p.getName() + p.getRegion(), Collectors.counting()))
.entrySet()
.stream()
.anyMatch(e -> e.getValue() > 1);
System.out.println("Fields are unique: " + isUnique);
}
private static List<User> getUser1() {
List<User> users = Arrays.asList(
new User("张三", 22, "深圳"),
new User("李四", 21, "广州"),
new User("王五", 24, "东莞"),
new User("王五", 21, "东莞")
);
return users;
}
}
输出:true 说明存在相同数据,false说明组合数据唯一
使用groupingBy
收集器检查name
和region
字段组合是否有重复。使用counting
函数,可以统计每个键出现的次数,然后通过anyMatch
检查是否存在计数大于1的元素。
2、获取两个集合中多个字段组合相同的数据
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class TestMain {
public static void main(String[] args) {
sameDate();
}
/**
* 获取两个集合中相同名字并且区域相同的数据
*/
private static void sameDate() {
List<User> users1 = getUser1();
List<User> users2 = getUser2();
List<User> users3 = users1.stream()
.filter(a -> users2.stream().anyMatch(b -> a.getName().equals(b.getName()) && a.getRegion().equals(b.getRegion())))
.collect(Collectors.toList());
users3.forEach(s -> {
System.out.println(s.getName() + " " + s.getRegion());
});
}
private static List<User> getUser1() {
List<User> users = Arrays.asList(
new User("张三", 22, "深圳"),
new User("李四", 21, "广州"),
new User("王五", 24, "东莞"),
new User("王五", 21, "东莞")
);
return users;
}
private static List<User> getUser2() {
List<User> users = Arrays.asList(
new User("张三", 26, "深圳"),
new User("李四", 19, "北京")
);
return users;
}
}
输出:张三 深圳
使用anyMatch对两个集合中的多个字段进行 if 判断