两个不同实体的list按照指定条件合并成新的list
时间: 2023-08-16 13:08:16 浏览: 89
php简单的两表合并成新表类.zip
可以使用 Java 8 的 Stream API 来将两个不同实体的 list 按照指定条件合并成新的 list。假设我们有两个 List,分别是 list1 和 list2,它们的元素类型是实体类 Entity1 和 Entity2,我们希望将这两个 list 按照指定条件合并成一个新的 list,可以按照以下方式实现:
```
List<Entity1> list1 = Arrays.asList(new Entity1(1, "a"), new Entity1(2, "b"), new Entity1(3, "c"));
List<Entity2> list2 = Arrays.asList(new Entity2(2, "b", 10), new Entity2(4, "d", 20), new Entity2(5, "e", 30));
List<Entity1> result = list1.stream()
.filter(e1 -> list2.stream().anyMatch(e2 -> e2.getName().equals(e1.getName())))
.map(e1 -> {
Entity2 e2 = list2.stream().filter(e -> e.getName().equals(e1.getName())).findFirst().get();
return new Entity1(e1.getId(), e1.getName(), e2.getValue());
})
.collect(Collectors.toList());
```
在这段代码中,我们首先使用 `filter()` 方法过滤出那些在 list2 中存在与之对应的元素,然后使用 `map()` 方法将这些元素映射成一个新的 Entity1 类型的对象,并在映射过程中根据指定条件从 list2 中获取对应的属性值,最后使用 `collect()` 方法将映射后的结果收集到一个新的 List 中。
需要注意的是,这个示例中我们假设 Entity1 类中有名为 name 的属性,而 Entity2 类中也有名为 name 的属性,并且它们的取值可以一一对应。另外,我们在映射的过程中使用了 `findFirst()` 方法来获取 list2 中与之对应的元素,这也假设了 list2 中的元素是唯一的。如果这些假设不满足,可能会导致映射不正确。
阅读全文