java代码比较两个list集合中的对象属性值的差别,如果list中包含list则递归比较,并将不同的地方标识出来
时间: 2023-08-07 19:03:14 浏览: 92
可以使用递归的方式来比较两个 `List` 中对象属性的差别,代码如下:
```java
public static void compareLists(List<?> list1, List<?> list2, String parentPath) {
int size1 = list1.size();
int size2 = list2.size();
int size = Math.min(size1, size2); // 取两个 List 中较小的 size
for (int i = 0; i < size; i++) {
Object obj1 = list1.get(i);
Object obj2 = list2.get(i);
String path = parentPath + "[" + i + "]"; // 记录路径
if (obj1 instanceof List && obj2 instanceof List) { // 如果是 List 类型,则递归比较
compareLists((List<?>) obj1, (List<?>) obj2, path);
} else if (!Objects.equals(obj1, obj2)) { // 如果不相等,则输出路径和值
System.out.println(path + " : " + obj1 + " != " + obj2);
}
}
// 处理剩余的元素
for (int i = size; i < size1; i++) {
System.out.println(parentPath + "[" + i + "] : " + list1.get(i) + " != null");
}
for (int i = size; i < size2; i++) {
System.out.println(parentPath + "[" + i + "] : null != " + list2.get(i));
}
}
```
该方法的参数为两个 `List` 和一个父路径,可以通过父路径来记录比较的元素位置,方便后续查看。在方法内部,首先获取两个 `List` 的大小,取较小的 size 进行比较,如果元素类型是 `List`,则递归比较,否则比较两个元素是否相等,如果不相等,则输出路径和值。最后,处理剩余的元素,如果某个 `List` 比较结束后还有剩余元素,则输出对应的路径和值。
示例代码:
```java
public static void main(String[] args) {
List<Object> list1 = new ArrayList<>();
list1.add("abc");
list1.add(123);
list1.add(new ArrayList<>(Arrays.asList(1, 2, 3)));
List<Object> list2 = new ArrayList<>();
list2.add("abc");
list2.add(456);
list2.add(new ArrayList<>(Arrays.asList(1, 2, 4, 5)));
compareLists(list1, list2, "");
}
```
输出结果:
```
[1] : 123 != 456
[2][2] : 3 != 4
[2][3] : null != 5
```
阅读全文
相关推荐



















