java stream 两个list 匹配 赋值
时间: 2023-11-07 07:09:41 浏览: 109
可以使用Java 8中的stream API和forEach来完成。具体实现方式如下:
```java
List<String> list1 = Arrays.asList("A", "B", "C");
List<Integer> list2 = Arrays.asList(1, 2, 3);
Map<String, Integer> result = new HashMap<>();
IntStream.range(0, Math.min(list1.size(), list2.size()))
.forEach(i -> result.put(list1.get(i), list2.get(i)));
System.out.println(result); // 输出 {A=1, B=2, C=3}
```
以上代码将两个List按照索引逐个匹配,并将结果保存在一个Map中。请注意,result中的键值对顺序与list1中的元素顺序相同,即如果list1中的元素顺序有改变,那么最终的输出结果也会相应变化。
相关问题
stream流操作两个list根据某字段匹配再对其中一个list进行赋值
Stream流操作是一种高效处理集合数据的方式,特别适用于需要对列表进行过滤、映射或聚合等操作的情况。如果你有两个List,比如`List甲`和`List乙`,并且它们都有相同的某个字段(例如,都包含`Person`对象,并且有`id`属性),你可以按照那个字段进行匹配。
假设你想找到`List乙`中与`List甲`中某个`id`相匹配的元素,然后将匹配到的结果赋值给`List甲`的对应位置,可以这样做:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
// 假设Person类有一个getId()方法返回int类型的id
class Person {
// ...
}
List<Person> listA = ...; // List甲
List<Person> listB = ...; // List乙
// 使用stream操作找到匹配项并更新listA
List<Integer> matchingIds = listB.stream()
.filter(person -> !listA.isEmpty() && person.getId() == listA.get(0).getId()) // 匹配条件
.map(Person::getId) // 映射到id
.collect(Collectors.toList());
// 如果有匹配,则更新listA
if (!matchingIds.isEmpty()) {
for (int i = 0; i < listA.size(); i++) {
if (matchingIds.contains(listA.get(i).getId())) {
// 将listB中相应id的元素设置回listA
listA.set(i, listB.stream().filter(person -> person.getId() == listA.get(i).getId()).findFirst().orElse(null));
}
}
}
```
java stream list<学生信息>中的班级id。 比较list<班级>集合,id相同则为学生信息中班级名称赋值
在Java Stream API中,你可以通过以下步骤来实现这个功能:
1. 首先,假设你有一个`List<StudentInfo>`列表,其中每个`StudentInfo`对象都有一个`classId`属性,表示学生的班级ID;还有一个`List<Class>`列表,包含所有班级的信息,包括`id`和`name`。
```java
import java.util.*;
import java.util.stream.Collectors;
// 假设你有以下类结构
class StudentInfo {
private int classId;
// 其他属性...
}
class Class {
private int id;
private String name;
// 构造函数和其他方法...
}
// 假设你已经填充了这两个列表
List<StudentInfo> studentInfos = ...;
List<Class> classes = ...;
```
2. 使用Stream API,你可以创建一个流并过滤出学生信息中对应的班级ID:
```java
Map<Integer, Class> classById = classes.stream()
.collect(Collectors.toMap(Class::getId, Function.identity()));
```
这将把`classes`列表转换成一个键值对映射,键是`Class`的`id`,值是`Class`本身。
3. 然后遍历`studentInfos`列表,并根据班级ID查找对应的班级名称:
```java
studentInfos.forEach(student -> {
Optional<Class> optionalClass = classById.get(student.getClassId());
if (optionalClass.isPresent()) {
student.setClassName(optionalClass.get().getName());
} else {
System.out.println("找不到匹配的班级ID for " + student.getClassId());
}
});
```
这里使用`Optional`是因为可能会存在`classById`中找不到对应`classId`的情况。
阅读全文