首页 > 解决方案 > 合并两个具有不同大小的列表,在某些条件下与流 api 合并

问题描述

假设我有两个列表,我想合并为一个

合并条件:与 id 比较

Case 1 : 
List 1 = [{id=1,name=null},{id=2,name=null},{id=3,name=c}]
List 2 = [{id=1,name=a},{id=2,name=b}]

合并后应该是[{id=1,name=a},{id=2,name=b},{id=3,name=c}]

Case 1 : 
List 1 = [{id=1,name=null}]
List 2 = [{id=1,name=a},{id=2,name=b}]

合并后应该是[{id=1,name=a},{id=2,name=b}]

我的代码:

 for (Object ObjofList1: list1) {
             List<DummyObject> do = new ArrayLIst();
            SomeObject sm = list2.stream()
                    .filter(list2object -> list2object.getId().equals(ObjofList1.getId()))
                    .findAny()
                    .orElse(ObjofList1);
                          do.add(dealerSalesTempObject);
          
        }

如果其中有更多元素,它工作正常list2,但如果list1有更多元素,那么我们将无法合并,因为迭代较少。

我的问题是我不想看到哪个更短或更长,但最后所有对象都应该在一个列表中..

标签: javasteam

解决方案


将 Stream 引入此类问题只会无缘无故地使事情变得更加复杂。根据您的示例,您只想创建一个包含两个列表中的元素的集合。这样的事情将是实现它的最简单方法:

Set<Object> resultSet = new HashSet<>(list1);
result.addAll(list2);
List<Object> resultList = new ArrayList<>(result); // optionally if u want a List

此解决方案假定您的类实现equals()hashcode()方法。


推荐阅读