Java 如何比较2个列表<;实体>;?

Java 如何比较2个列表<;实体>;?,java,Java,我有两个列表实体,如果可能的话,我不想通过嵌套循环进行比较 假设我有这样的实体: List<Entity1> = entity1Repository.findByCode(String code); List<Entity2> = entity2Repository.findByName(String name); List=entity1Repository.findByCode(字符串代码); List=entity2Repository.findByName(字符

我有两个列表实体,如果可能的话,我不想通过嵌套循环进行比较

假设我有这样的实体:

List<Entity1> = entity1Repository.findByCode(String code);
List<Entity2> = entity2Repository.findByName(String name);
List=entity1Repository.findByCode(字符串代码);
List=entity2Repository.findByName(字符串名);
我想要比较这些实体,我想要列表的结果,这个列表只有相同值的值

比如这个=
[1,2,4]
[1,2,5]
我想要这样的结果==>
[1,2]


在Java中如何做到这一点

您可以编写一个函数,返回一个列表,其中包含作为参数传递的两个列表的相交元素:

public <T> List<T> intersection(List<T> list1, List<T> list2) {
        List<T> list = new ArrayList<T>();

        for (T t : list1) {
            if(list2.contains(t)) {
                list.add(t);
            }
        }

        return list;
    }
公共列表交叉点(列表1、列表2){
列表=新的ArrayList();
for(T:list1){
if(列表2.contains(t)){
列表。添加(t);
}
}
退货清单;
}
假设输入:

List<Integer> l1 = Arrays.asList(1, 2, 3, 4);
List<Integer> l2 = Arrays.asList(11, 2, 5, 4);
List l1=Arrays.asList(1,2,3,4);
listl2=Arrays.asList(11,2,5,4);
列出两种方法:

    //method 1
    List<Integer> result = l1.stream().filter(l2::contains).collect(Collectors.toList());
    System.out.println(result);

    //method 2
    Set<Integer> s1 = new HashSet<>(l1);
    s1.retainAll(l2);

    System.out.println(s1);
    System.out.println(l1);
//方法1
List result=l1.stream().filter(l2::contains).collect(Collectors.toList());
系统输出打印项次(结果);
//方法2
Set s1=新哈希集(l1);
s1.保留(l2);
系统输出打印LN(s1);
系统输出打印LN(l1);
在method1中:您正在使用streams,这是来自java的一个极好的概念


在方法2中:您正在创建另一个集合,并对其调用retainal()。这将从s1中删除其他元素,但不会影响原始列表l1。

您可以使用Java 8流api从两个列表中获取公共元素

List commonEntity=entity1.stream()
.filter(entity2::contains)
.收藏(收藏家)

.toList())

它在列表和列表中也能工作吗?因为你的例子是List,所以我对Java还是很陌生。你的类:“实体”必须至少有一个方法:@Override public boolean equals(Object obj){…}你能举例说明如何在实体上写这个吗?我已经试过了,但仍然不明白什么是public
意思?我应该在列表commonEntity中写其中一个的实体吗?它应该是您想要比较的元素类型。例如:如果比较两个类型列表,则结果列表类型将为字符串。如果Entity1和Entity2没有公共超类型(Emtkty接口),则可以在下面的答案中使用Object,并且必须编写一个静态帮助函数,该函数提取并比较值
静态布尔isSameEntityValue(Entity1 es,Entity2 e2)