strem流对对象集合的某个字段分组
时间: 2024-02-23 14:03:04 浏览: 69
Java 8中的流可以使用Collectors.groupingBy()方法对对象集合中的某个字段进行分组。假设有一个Person类,其中包含id和name字段,可以使用以下代码根据id字段对Person对象集合进行分组操作:
```
List<Person> personList = new ArrayList<>();
//添加一些Person对象到personList
Map<Long, List<Person>> groupedPersons = personList.stream()
.collect(Collectors.groupingBy(Person::getId));
```
这个代码中,我们使用了Collectors.groupingBy()方法,它接受一个Function参数来提取对象的key,这里我们使用Person::getId方法作为key提取器。它将返回一个Map<Long, List<Person>>,其中key是id,value是包含该id的所有Person对象的列表。
相关问题
java stream根据某个字段分组
Java Stream 可以使用 `Collectors.groupingBy()` 方法来根据某个字段进行分组,示例如下:
假设有一个 `Person` 类,包含 `name` 和 `age` 两个字段:
```java
public class Person {
private String name;
private int age;
// 构造函数、getter 和 setter 略
}
```
现在有一个 `List<Person>` 类型的集合,需要根据年龄进行分组,可以使用以下代码:
```java
List<Person> personList = // 从数据源获取 Person 集合
Map<Integer, List<Person>> ageMap = personList.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
这样,就会得到一个 `Map<Integer, List<Person>>` 类型的结果,其中键是年龄,值是年龄相同的 `Person` 对象组成的集合。
java用stream流将list集合按照里面某两个字段去重
在Java中,可以使用Stream API来处理List集合并基于指定的字段去重。假设我们有一个Person对象的列表,包含name和age字段,我们可以这样做:
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class Person {
String name;
int age;
// 构造函数、getter和setter...
}
List<Person> originalList = ...; // 原始的Person列表
// 定义按name和age组合的唯一键
Comparator<Person> keyExtractor = (p1, p2) ->
Objects.hash(p1.getName(), p2.getAge());
// 使用Collectors.groupingBy和distinct方法去重
List<Person> uniqueList = originalList.stream()
.collect(Collectors.groupingBy(keyExtractor, Collectors.toList()));
```
这里,`groupingBy`方法会根据keyExtractor提供的比较器对元素进行分组,而`distinct`则只保留每个唯一分组的第一个元素,实现了去重的效果。
阅读全文