Stream流处理将两个集合的相同字段,赋值到另一个集合
时间: 2024-03-09 19:46:18 浏览: 21
假设有两个类,ClassA和ClassB,都有一个相同的字段field,现在要将这两个类的field字段的值赋值到一个新的类ClassC中,可以使用Java 8中的Stream流处理来实现。具体代码如下:
```java
List<ClassA> listA = new ArrayList<>();
List<ClassB> listB = new ArrayList<>();
// 添加数据到 listA 和 listB 中
List<ClassC> listC = Stream.concat(listA.stream(), listB.stream())
.map(obj -> new ClassC(obj.getField()))
.collect(Collectors.toList());
```
这段代码首先使用Stream.concat()方法将listA和listB合并成一个流,然后使用map()方法将每个对象的field字段值提取出来,再用这些值创建一个新的ClassC对象,并最终使用collect()方法将所有的ClassC对象收集到一个列表中。
相关问题
如何将一个集合放在另一个集合的某个字段 Java stream流实现
假设你有两个类,一个是 `Outer`,另一个是 `Inner`,其中 `Outer` 包含一个 `List<Inner>` 类型的字段 `innerList`,而 `Inner` 包含一个 `String` 类型的字段 `name`。你想要将一个名为 `sourceList` 的 `List<Inner>` 集合添加到 `outerList` 集合中,并将其添加到 `outerList` 中的某个 `Outer` 对象的 `innerList` 字段中。
你可以使用 Java 8 的 Stream API 和 Lambda 表达式来实现此目的,代码如下:
```
List<Outer> outerList = new ArrayList<>();
// 假设你已经有了一个名为 sourceList 的 List<Inner> 集合
String targetOuterName = "targetOuterName"; // 目标 Outer 对象的 name 字段
outerList.stream()
.filter(outer -> outer.getName().equals(targetOuterName))
.findFirst()
.ifPresent(outer -> outer.getInnerList().addAll(sourceList));
```
这段代码首先使用 `stream()` 方法将 `outerList` 转换为 Stream,然后使用 `filter()` 方法筛选出 `name` 字段值等于 `targetOuterName` 的 `Outer` 对象,使用 `findFirst()` 方法获取第一个匹配的对象,最后使用 `ifPresent()` 方法对匹配的 `Outer` 对象执行添加操作。
list集合通过stream流获取一个字段的集合
可以使用 Java 8 的 Stream API 来获取一个 List 集合中某个字段的集合。假设我们有一个 List<Person>,其中 Person 类有一个 name 字段,我们想要获取所有 Person 的名字集合,则可以使用如下代码:
```
List<Person> personList = ... // 初始化 Person 集合
List<String> nameList = personList.stream()
.map(Person::getName)
.collect(Collectors.toList());
```
这里使用了 map() 方法将 Person 对象转换为其 name 字段,然后使用 collect() 方法将转换后的结果收集到一个新的 List 集合中。