java 比较两个List<Object>是否相同
时间: 2023-10-14 11:34:25 浏览: 167
可以使用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()方法正确实现。
相关问题
Java8实现:Stream<A>和Stream<B>按照Function<T,List<Object>>、Function<U,List<Object>>进行匹配,将匹配成功的Stream<A>和Stream<B>以List<Pair<A,B>>的形式返回。已知Stream<A>和Stream<B>已经按匹配key排好序了,要求减少嵌套循环来提高性能
可以通过Stream API的zip操作和flatMap方法来实现该功能,具体代码如下:
```java
public static <A, B, T> List<Pair<A, B>> matchStreams(
Stream<A> streamA,
Stream<B> streamB,
Function<A, List<T>> keyExtractorA,
Function<B, List<T>> keyExtractorB) {
Iterator<A> iteratorA = streamA.iterator();
Iterator<B> iteratorB = streamB.iterator();
List<Pair<A, B>> result = new ArrayList<>();
A a = null;
B b = null;
while (iteratorA.hasNext() && iteratorB.hasNext()) {
if (a == null) {
a = iteratorA.next();
}
if (b == null) {
b = iteratorB.next();
}
List<T> keyA = keyExtractorA.apply(a);
List<T> keyB = keyExtractorB.apply(b);
int compareResult = keyA.compareTo(keyB);
if (compareResult == 0) {
result.add(new Pair<>(a, b));
a = null;
b = null;
} else if (compareResult < 0) {
a = null;
} else {
b = null;
}
}
return result;
}
```
该方法中,首先通过iterator方法获取Stream<A>和Stream<B>的迭代器,然后使用while循环遍历两个Stream。
在每次循环中,首先判断a和b是否为null,如果是则分别从迭代器中获取下一个元素。
接着,使用keyExtractorA和keyExtractorB分别提取出a和b对应的key,比较两个key,根据比较结果执行不同的操作。
如果两个key相等,则将a和b组成一个Pair并添加到结果列表中,并将a和b置为null,以便下一次匹配。
如果keyA小于keyB,则将a置为null,表示需要在StreamA中继续寻找与b匹配的元素。
如果keyA大于keyB,则将b置为null,表示需要在StreamB中继续寻找与a匹配的元素。
最终,返回结果列表。
该实现将嵌套循环转换为了单层循环,避免了性能问题。同时,由于使用了Stream API的zip操作和flatMap方法,代码也更加简洁易懂。
java 求两个List<Object>的交集,并集,差集
可以使用Java自带的Collection工具类来求两个List<Object>的交集、并集和差集:
```java
import java.util.*;
public class ListUtils {
// 求两个列表的交集
public static List<Object> intersection(List<Object> list1, List<Object> list2) {
List<Object> result = new ArrayList<>(list1);
result.retainAll(list2);
return result;
}
// 求两个列表的并集
public static List<Object> union(List<Object> list1, List<Object> list2) {
Set<Object> set = new HashSet<>(list1);
set.addAll(list2);
return new ArrayList<>(set);
}
// 求两个列表的差集
public static List<Object> difference(List<Object> list1, List<Object> list2) {
List<Object> result = new ArrayList<>(list1);
result.removeAll(list2);
return result;
}
}
```
上述代码中,intersection()方法使用List自带的retainAll()方法求两个列表的交集,union()方法使用Set求两个列表的并集,difference()方法使用List自带的removeAll()方法求两个列表的差集。需要注意的是,如果列表中的元素是自定义对象,那么要确保对象的hashCode()和equals()方法正确实现。
阅读全文