java8Stream()list<object>过滤出object属性中满足age>1,name为Sting定义字段的,并将满足条件的list属性class设置为null,然后返回
时间: 2024-04-13 21:28:07 浏览: 110
要使用 Java 8 的 Stream 过滤 List<Object> 中的对象属性,并将满足条件的对象的属性设置为 null,然后返回满足条件的对象列表,您可以按照以下步骤进行操作:
假设您有一个包含对象的 List,每个对象都有一个 `age` 和 `name` 属性,您想要过滤出 `age > 1` 并且 `name` 字段为特定字符串的对象,并将满足条件的对象的 `class` 属性设置为 null。
首先,确保您的对象类具有 `age`、`name` 和 `class` 属性,并提供相应的 getter 和 setter 方法。
然后,您可以使用 Stream 的 `filter()` 方法结合 Lambda 表达式来进行过滤,并使用 `peek()` 方法来设置满足条件的对象的 `class` 属性为 null。
以下是示例代码:
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class FilterObjectsExample {
public static void main(String[] args) {
// 创建包含对象的 List
List<Person> persons = Arrays.asList(
new Person("John", 25, Person.class),
new Person("Jane", 30, Person.class),
new Person("Alice", 20, Person.class)
);
// 过滤出 age > 1 并且 name 字段为 "Jane" 的对象,并将满足条件的对象的 class 属性设置为 null
List<Person> filteredPersons = persons.stream()
.filter(person -> person.getAge() > 1 && person.getName().equals("Jane"))
.peek(person -> person.setClazz(null))
.collect(Collectors.toList());
// 输出结果
for (Person person : filteredPersons) {
System.out.println(person.getName() + " - " + person.getAge() + " - " + person.getClazz());
}
}
static class Person {
private String name;
private int age;
private Class<?> clazz;
public Person(String name, int age, Class<?> clazz) {
this.name = name;
this.age = age;
this.clazz = clazz;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public Class<?> getClazz() {
return clazz;
}
public void setClazz(Class<?> clazz) {
this.clazz = clazz;
}
}
}
```
在上面的示例中,我们创建了一个包含 `Person` 对象的 List。使用 Stream,我们使用 `filter()` 方法选择 `age > 1` 并且 `name` 为 "Jane" 的对象,并使用 `peek()` 方法设置满足条件的对象的 `class` 属性为 null。最后,我们使用 `collect()` 方法将结果收集到一个新的 List 中,并打印输出结果。
请确保在代码中替换示例的 `Person` 类和相应的属性、getter 和 setter 方法以适应您的实际需求。
阅读全文