假设一个list A是一个O对象类型,O对象有name,age,size 三个属性,另外一个list B是string类型,用stream让A的name去和B按顺序匹配,只要匹配上,A里对应的O对象的age就要+1
时间: 2024-03-22 08:40:23 浏览: 37
可以使用Java 8中的Stream API中的IntStream.range()方法和forEach()方法来实现。
首先,我们需要将list B转换为一个有序的Stream对象。可以使用Stream的of方法将list B转换为一个Stream对象,然后调用sorted()方法对其进行排序。
然后,我们可以使用IntStream.range()方法来生成一个包含list A的下标的IntStream对象,然后使用forEach()方法来对每个下标进行操作,将list A中对应位置的O对象的name与list B的对应位置的元素进行匹配,如果匹配成功,则将O对象的age属性加1。
下面是示例代码:
```java
List<O> listA = Arrays.asList(
new O("Tom", 20, 100),
new O("Jerry", 25, 200),
new O("Alice", 30, 300)
);
List<String> listB = Arrays.asList("Jerry", "Tom", "Alice");
IntStream.range(0, Math.min(listA.size(), listB.size()))
.forEach(i -> {
O o = listA.get(i);
String name = listB.get(i);
if (o.getName().equals(name)) {
o.setAge(o.getAge() + 1);
}
});
System.out.println(listA); // 输出 [O{name='Tom', age=21, size=100}, O{name='Jerry', age=26, size=200}, O{name='Alice', age=31, size=300}]
```
在这个示例代码中,我们将list B转换为一个有序的Stream对象,并使用IntStream.range()方法生成一个包含list A的下标的IntStream对象。在forEach()方法中,我们将list A中对应位置的O对象的name与list B的对应位置的元素进行匹配,并进行递增操作。最终输出结果。
阅读全文