list集合对象多属性过滤
时间: 2023-09-03 11:07:30 浏览: 45
如果你想在一个 list 中过滤多个属性,可以使用 filter() 函数结合 lambda 表达式。假设你有一个包含多个对象的 list,每个对象有多个属性,例如:
```
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
people = [
Person("Alice", 25, "F"),
Person("Bob", 30, "M"),
Person("Charlie", 20, "M"),
Person("David", 35, "M"),
Person("Eve", 27, "F")
]
```
如果你想过滤出年龄大于等于 30 年且性别为男性的人,可以这样写:
```
filtered_people = filter(lambda p: p.age >= 30 and p.gender == "M", people)
```
这将返回一个 filter 对象,你可以将其转换成 list 或者使用 for 循环遍历。例如:
```
for person in filtered_people:
print(person.name)
```
这将输出:
```
Bob
David
```
相关问题
java中使用stream根据对象属性过滤对象集合
可以使用Java 8中引入的Stream API来根据对象属性过滤对象集合。下面是一个示例:
假设有一个Person类,其中有name和age两个属性:
```
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
```
现在有一个List<Person>对象,我们要根据age属性过滤出年龄大于等于18的Person对象,可以使用如下的代码:
```
List<Person> people = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 17),
new Person("Charlie", 25),
new Person("David", 10)
);
List<Person> filteredPeople = people.stream()
.filter(p -> p.getAge() >= 18)
.collect(Collectors.toList());
System.out.println(filteredPeople);
```
输出结果为:
```
[Person{name='Alice', age=20}, Person{name='Charlie', age=25}]
```
在上面的代码中,我们使用了Stream的filter方法来过滤出年龄大于等于18的Person对象,然后使用collect方法将过滤后的结果收集到一个List中。
stream流将下标超过7的List对象集合属性进行改变
可以使用 Java 8 的 Stream API 中的 map 方法和 forEach 方法来实现这个功能。代码示例如下:
```java
List<MyObject> myList = // 获取 List 对象集合
myList.stream()
.filter(obj -> obj.getListProperty() != null && obj.getListProperty().size() > 7) // 过滤掉 List 长度小于等于 7 的对象
.forEach(obj -> {
List<String> list = obj.getListProperty(); // 获取 List 属性
for (int i = 7; i < list.size(); i++) { // 将下标超过 7 的元素进行修改
list.set(i, "new value");
}
});
```
这段代码会遍历 List 集合中的每个对象,找到 List 属性长度大于 7 的对象,然后将 List 属性中下标大于等于 7 的元素进行修改。