collectors.groupingby多条件
时间: 2023-06-05 14:47:59 浏览: 82
Java 8 的 Collectors.groupingBy 可以通过多个条件对数据进行分组。可以使用多个 Collectors.groupingBy 的方法,分别对数据按照不同的条件分组,最后合并分组的结果。
例如:
```
List<Person> people = ...;
Map<String, Map<Integer, List<Person>>> result = people.stream().collect(
Collectors.groupingBy(Person::getCity,
Collectors.groupingBy(Person::getAge))
);
```
在上面的代码中,我们将数据首先按照 city 分组,然后再按照 age 分组。最终得到了一个 city 与 age 两个维度的分组结果。
相关问题
Collectors.groupingBy 多条件分组
可以使用Collectors.groupingBy方法的重载版本,该版本接受一个Function类型的参数,该参数返回一个由多个属性组成的键,用于对集合进行分组。下面是一个例子,演示如何使用Collectors.groupingBy方法对一个集合进行多条件分组:
```java
Map<String, Map<String, List<Product>>> map = productList.stream()
.collect(Collectors.groupingBy(Product::getCategory, Collectors.groupingBy(Product::getBrand)));
```
上述代码中,首先按照产品类别进行分组,然后在每个类别中再按照品牌进行分组,最终得到一个Map对象,其中键为类别,值为另一个Map对象,该Map对象的键为品牌,值为该品牌下的产品列表。
java Collectors.groupingBy 自定义条件
如果你想使用Java 8中的Collectors.groupingBy方法来根据自定义条件对一个数据集进行分组,你可以使用Collectors.groupingBy方法的重载版本,该版本接受一个Function参数,该Function参数将每个元素映射到一个自定义分组键。例如,假设你有一个Person类的列表,你想根据Person对象的年龄分组,但只想分成两组:18岁及以下和19岁及以上。你可以这样做:
```
Map<String, List<Person>> groups = persons.stream()
.collect(Collectors.groupingBy(
person -> person.getAge() <= 18 ? "18 and under" : "19 and over"));
```
在这个例子中,我们使用了一个lambda表达式将Person对象映射到一个字符串,该字符串指示该对象属于哪个分组。最终,我们得到了一个Map对象,其中键是分组名称,值是一个Person对象列表。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)