假设一个list A是一个O对象类型,O对象有name,size,age 三个属性,另外一个list B是string类型,用stream让A的name去和B按顺序匹配,按照B里的顺序匹配后让0对象的age递增
时间: 2024-03-22 20:40:29 浏览: 79
可以使用Java 8中的Stream API来实现这个需求。具体代码如下:
```
List<O> A = ...; // 假设已经有一个List<O> A
List<String> B = ...; // 假设已经有一个List<String> B
AtomicInteger age = new AtomicInteger(0); // 用于记录递增后的age值
List<O> result = B.stream()
.map(b -> A.stream()
.filter(a -> a.getName().equals(b))
.findFirst()
.orElse(null))
.peek(o -> {
if (o != null) {
o.setAge(age.getAndIncrement());
}
})
.collect(Collectors.toList());
```
解释一下上面的代码:
1. 首先创建一个AtomicInteger对象用于记录递增后的age值,初始值为0。
2. 使用Stream的map()方法将B中的每个字符串映射为A中对应的O对象。如果B中的字符串在A中找不到对应的O对象,则返回null。
3. 使用Stream的peek()方法对每个找到的O对象进行处理。如果O对象不为null,则将其age设置为当前的age值,并将age值递增。
4. 最后使用Stream的collect()方法将处理后的O对象收集到一个新的List中并返回。
上面的代码中使用了AtomicInteger来避免多线程环境下的age值竞争问题。如果只在单线程环境下使用,也可以直接使用int类型的变量来记录age值。
阅读全文