Class A 包含字段 x Class B 也包含字段 x,如果判断List<A> lista 和 List<B> listb 有相同的 x?

要判断两个不同类型的对象列表 List<A> 和 List<B> 是否包含相同的 x字段值(即两个列表中至少有一个 x是相同的),你可以使用 Java 8 的 Stream API 来实现。

java 复制代码
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class CompareX {

    // 假设类 A 和 B 结构如下:
    static class A {
        private String x;
        // 构造方法、getter 省略
        public A(String x) { this.x= x; }
        public String getX() { return x; }
    }

    static class B {
        private String spdm;
        // 构造方法、getter 省略
        public B(String x) { this.x= x; }
        public String getX() { return x; }
    }

    /**
     * 判断 lista 和 listb 是否有相同的 x值
     */
    public static boolean hasSameX(List<A> lista, List<B> listb) {
        if (lista.isEmpty() || listb.isEmpty()) {
            return false;
        }

        // 将 listb 的 x提取为 Set,便于快速查找
        Set<String> xSet = listb.stream()
                                   .map(B::getX)
                                   .collect(Collectors.toSet());

        // 检查 lista 中是否有任何一个 x在 xet 中
        return lista.stream()
                    .anyMatch(a -> spdmSet.contains(a.getX()));
    }

    // 使用示例
    public static void main(String[] args) {
        List<A> lista = List.of(new A("001"), new A("002"), new A("003"));
        List<B> listb = List.of(new B("004"), new B("002"), new B("005"));

        boolean result = hasSameX(lista, listb);
        System.out.println("是否有相同的 x: " + result); // 输出: true(因为都有 "002")
    }
}