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