我有2列表实体,如果可能的话,我不想通过嵌套循环来比较它,
假设我有这样的实体:
List<Entity1> = entity1Repository.findByCode(String code);
List<Entity2> = entity2Repository.findByName(String name);
我想比较这些实体,我想要列表的结果,这个列表的值只有相同的值,
比如this=,[1, 2, 4]
,[1,2,5]
和我想要像==> [1,2]
这样的结果
如何在Java中做到这一点
发布于 2019-07-03 23:13:18
您可以编写一个函数,该函数返回包含作为参数传递的2个列表的交叉元素的列表:
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;
}
发布于 2019-07-03 23:34:12
假设投入:
List<Integer> l1 = Arrays.asList(1, 2, 3, 4);
List<Integer> l2 = 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);
在method1中:您正在使用流,这是来自java的一个很棒的概念。
在method2中:您正在创建另一个集合,并在其上调用retainAll()。这将从s1中删除其他元素,但不会影响原始列表l1。
发布于 2019-07-03 23:44:52
您可以使用Java8StreamAPI从两个列表中获取公共元素。
List<Entity> commonEntity = entity1.stream() .filter(entity2::contains) .collect(Collectors .toList()));
https://stackoverflow.com/questions/56882406
复制