java - 合并两个具有不同大小的列表,在某些条件下与流 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
有更多元素,那么我们将无法合并,因为迭代较少。
我的问题是我不想看到哪个更短或更长,但最后所有对象都应该在一个列表中..
解决方案
将 Stream 引入此类问题只会无缘无故地使事情变得更加复杂。根据您的示例,您只想创建一个包含两个列表中的元素的集合。这样的事情将是实现它的最简单方法:
Set<Object> resultSet = new HashSet<>(list1);
result.addAll(list2);
List<Object> resultList = new ArrayList<>(result); // optionally if u want a List
此解决方案假定您的类实现equals()
和hashcode()
方法。
推荐阅读
- python - Python:将声音从文件(mp3、wav、ogg)播放到不同的声音设备
- pandas - python重塑每n列
- c - 在 C 中打印最长公共子字符串的代码
- php - Laravel - 当播种机调用时使目录不起作用
- javascript - 如何使用 setInterval 构造 useEffect
- python - 如何在列向量中找到n个最大元素的索引,Python
- ruby-on-rails - 为什么我的表格没有保存?form_for 问题
- python - 嵌套模型时没有提供渐变 Keras Tensorflow
- c++ - 如何在 EXPECT_CALL 中使用 testing::_,不包括 2 个值?
- python - 创建第二个实例时,画布上的第一个实例图像消失