stream获取list中某个对象属性
时间: 2023-11-26 10:02:28 浏览: 41
可以使用Python中的列表推导式来实现,例如:
```python
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
people = [Person("Alice", 25), Person("Bob", 30), Person("Charlie", 35)]
# 获取所有人的年龄
ages = [person.age for person in people]
# 获取年龄大于30的人的名字
names = [person.name for person in people if person.age > 30]
```
在上面的例子中,我们定义了一个`Person`类表示一个人,包含`name`和`age`属性。然后我们创建一个包含若干个`Person`对象的列表`people`。我们可以用列表推导式来获取`people`中所有人的年龄,也可以获取年龄大于30的人的名字。
相关问题
java list stream 获取对象某个值
如果你想从一个对象列表中获取某个属性值,可以使用Java 8中的Stream API来实现。假设你有一个Person类的列表,你想获取所有人的姓名,可以这样做:
```
List<Person> persons = ... // 假设这里有一个Person对象列表
List<String> names = persons.stream()
.map(Person::getName) // 将每个Person对象映射到其姓名属性
.collect(Collectors.toList()); // 将所有姓名收集到一个列表中
```
在这个例子中,我们使用了Stream的map()方法将每个Person对象映射到其姓名属性,然后使用collect()方法将所有姓名收集到一个列表中。这里的Person::getName是一个方法引用,它等价于使用lambda表达式 person -> person.getName()。
如果你只想获取符合某个条件的对象的某个属性值,可以在map()方法之前使用filter()方法来过滤列表中的对象。例如,假设你只想获取年龄大于18岁的人的姓名,可以这样做:
```
List<String> names = persons.stream()
.filter(person -> person.getAge() > 18) // 过滤年龄大于18岁的人
.map(Person::getName) // 将每个Person对象映射到其姓名属性
.collect(Collectors.toList()); // 将所有姓名收集到一个列表中
```
在这个例子中,我们使用了filter()方法来过滤年龄大于18岁的人,然后使用map()方法将每个符合条件的Person对象映射到其姓名属性。最后,我们使用collect()方法将所有姓名收集到一个列表中。
Stream判断集合中所有对象的某个属性相同
可以使用Java 8的流来判断集合中所有对象的某个属性是否相同。假设我们有一个Person类,其中有一个属性age,我们要判断集合中所有对象的年龄是否相同,可以使用如下代码:
```java
List<Person> personList = new ArrayList<>();
// 添加Person对象到集合中
boolean allAgesEqual = personList.stream()
.mapToInt(Person::getAge) // 获取所有年龄
.distinct() // 去重
.count() == 1; // 判断是否只有一个年龄
if (allAgesEqual) {
System.out.println("集合中所有对象的年龄相同");
} else {
System.out.println("集合中对象的年龄不相同");
}
```
首先,我们将集合转换为流,然后使用mapToInt方法将每个Person对象的年龄提取出来,得到一个IntStream流。接着使用distinct方法去重,最后使用count方法判断是否只有一个年龄。如果只有一个年龄,说明集合中所有对象的年龄相同。