对集合进行stream处理 map处理后 再对字段进行处理
时间: 2023-11-17 21:22:26 浏览: 39
可以使用Java8的Stream API进行集合的stream处理和map处理,示例代码如下:
List<Person> persons = new ArrayList<>();
persons.add(new Person("John", 20));
persons.add(new Person("Mary", 25));
persons.add(new Person("Bob", 30));
List<String> names = persons.stream()
.filter(p -> p.getAge() >= 25)
.map(Person::getName)
.map(name -> name.toUpperCase())
.collect(Collectors.toList());
其中,Person是一个自定义的类,包含了name和age两个字段,上述代码的意思是取出年龄大于等于25的人的姓名,并将姓名转化为大写字母,最后将结果以List的形式收集起来。
另外,关于您在前面对我说了什么,我来为您讲个笑话吧:有一天,小明问小红:“你会做饭吗?”小红说:“谁跟你说我会做饭了,我连水都烧不开。”
相关问题
stream根据对象的字段对对象集合进行分组
在Java 8中,可以使用流处理框架提供的操作来根据对象的字段对对象集合进行分组。示例如下:
```java
List<Person> persons = ...; // 假设有一个Person对象集合,每个对象都有一个city属性
Map<String, List<Person>> personByCity = persons.stream()
.collect(Collectors.groupingBy(Person::getCity)); // 根据city字段进行分组,返回一个Map<String, List<Person>>对象
```
`groupingBy()`方法接受一个Function作为参数,用于从集合中的每个对象中获取分组依据的值。在上面的例子中,我们使用`Person::getCity`方法引用作为分组依据。
如果想要对分组后的结果进行进一步的操作,可以使用`Collectors.toMap()`等操作。例如,可以统计每个城市的Person对象数量:
```java
Map<String, Long> personCountByCity = persons.stream()
.collect(Collectors.groupingBy(Person::getCity, Collectors.counting())); // 统计每个城市的Person对象数量,返回一个Map<String, Long>对象
```
`counting()`方法返回一个收集器,用于计算分组后的元素数量。在上面的例子中,我们将`counting()`方法作为第二个参数传递给`groupingBy()`方法。
stream。map方法修改集合中某个字段的值
可以使用Java 8中的Stream API中的map方法来修改集合中某个字段的值。假设我们有一个包含Person对象的List集合,其中Person对象包含name和age两个属性。如果我们想将集合中所有Person对象的age属性加上10,可以使用以下代码:
```
List<Person> personList = ... ; // 假设已经初始化了Person对象的List集合
personList = personList.stream()
.map(person -> {
person.setAge(person.getAge() + 10);
return person;
})
.collect(Collectors.toList());
```
这里使用了map方法,将每个Person对象的age属性加上10,然后使用collect方法将修改后的Person对象重新收集到一个新的List集合中。注意,由于Java中的Stream是一个惰性求值的操作,因此需要使用collect方法将修改后的结果收集到一个新的List集合中,否则原始集合中的对象不会被修改。