Java判断两个list种的某一个属性值是否相等
时间: 2023-11-27 18:04:34 浏览: 131
可以使用Java中的Stream API来实现这个功能。具体实现方法如下:
1. 使用Stream的map方法将集合中的对象转化成属性值的集合;
2. 使用Stream的distinct方法去重;
3. 使用Stream的count方法统计去重后的元素个数,如果为1则说明两个集合中的对象某个属性值全部相等,否则不相等。
示例代码如下:
```java
public static boolean isPropertyEqual(List<?> list1, List<?> list2, String propertyName) {
// 将集合中的对象转化成属性值的集合
List<Object> propertyList1 = list1.stream().map(obj -> {
try {
Field field = obj.getClass().getDeclaredField(propertyName);
field.setAccessible(true);
return field.get(obj);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
return null;
}
}).collect(Collectors.toList());
// 将集合中的对象转化成属性值的集合
List<Object> propertyList2 = list2.stream().map(obj -> {
try {
Field field = obj.getClass().getDeclaredField(propertyName);
field.setAccessible(true);
return field.get(obj);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
return null;
}
}).collect(Collectors.toList());
// 去重
propertyList1 = propertyList1.stream().distinct().collect(Collectors.toList());
propertyList2 = propertyList2.stream().distinct().collect(Collectors.toList());
// 统计去重后的元素个数,如果为1则说明两个集合中的对象某个属性值全部相等,否则不相等
return propertyList1.size() == 1 && propertyList2.size() == 1 && propertyList1.get(0).equals(propertyList2.get(0));
}
```
其中,list1和list2分别表示两个集合,propertyName表示要比较的属性名。返回值为一个布尔值,表示两个集合中的对象某个属性值是否全部相等。
阅读全文