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)