java 比较两个list中同名字段的值是否相同
时间: 2023-08-07 08:02:35 浏览: 53
可以使用Java 8的Stream API来比较两个List中同名字段的值是否相同。假设有两个List,分别为list1和list2,且它们的元素对象都有一个名为name的字段,可以按如下方式比较它们的name字段值是否相同:
```
boolean isSame = list1.stream()
.map(item1 -> list2.stream()
.filter(item2 -> item1.getName().equals(item2.getName()))
.findFirst()
.map(item2 -> item1.getName().equals(item2.getName()))
.orElse(false))
.allMatch(Boolean.TRUE::equals);
```
这段代码会先对list1进行Stream操作,对于list1中的每个元素item1,会在list2中查找是否存在一个元素item2,使得它们的name字段值相同。如果存在,则比较它们的name字段值是否相同,如果相同,则返回true,否则返回false。如果不存在,则返回false。最后,使用allMatch方法判断所有元素的比较结果是否都为true,如果是,则返回true,否则返回false。
相关问题
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分别表示要比较的两个属性名。返回值为一个布尔值,表示两个集合中的对象某两个属性值是否全部相等。
java 比较两个List<Object>是否相同
可以使用Java自带的equals()方法来比较两个List<Object>是否相同,示例如下:
```java
public boolean compareLists(List<Object> list1, List<Object> list2) {
if (list1 == null && list2 == null) {
return true;
}
if (list1 == null || list2 == null || list1.size() != list2.size()) {
return false;
}
return list1.equals(list2);
}
```
上述代码中,首先判断两个列表是否同时为null,如果都为null,则认为它们相同;如果其中一个为null,或者两个列表的长度不同,则认为它们不相同。最后,使用list1.equals(list2)方法比较两个列表是否相同。这个方法会比较两个列表中每个元素是否相同,如果每个元素都相同,则返回true,否则返回false。需要注意的是,如果列表中的元素是自定义对象,那么要确保对象的equals()方法正确实现。