资源说明:"JAVA8 STREAM COLLECT GROUPBY分组实例解析"
JAVA8 中的Stream API提供了Collectors.groupBy()方法来实现分组操作,分组后的结果是一个Map对象,其中key是分组的条件,value是分组后的列表。下面通过示例代码介绍了JAVA8 STREAM COLLECT GROUPBY分组实例解析。
定义一个实体类People,用于测试,包含四个属性:name、character、sex和age。通过建造者模式构建实体对象,并提供了一个静态方法buildPeopleList(),用于生成一组测试数据。
在测试类GroupByTest中,我们使用Stream API来实现分组操作。使用Collectors.groupBy()方法来将数据分组,根据sex属性进行分组。然后,使用Collectors.summingInt()方法来统计各个性别的人数。使用Collectors.mapping()方法来将各个性别映射到相应的姓名列表。
以下是详细的代码实现:
```java
import org.junit.Test;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupByTest {
@Test
public void testGroupBy() {
List people = People.buildPeopleList();
Map countBySex = people.stream()
.collect(Collectors.groupingBy(People::getSex, Collectors.counting()));
Map> nameBySex = people.stream()
.collect(Collectors.groupingBy(People::getSex, Collectors.mapping(People::getName, Collectors.toList())));
System.out.println("各个性别的人数:" + countBySex);
System.out.println("各个性别的姓名列表:" + nameBySex);
}
}
```
在上面的代码中,我们使用Stream API来实现分组操作。使用Collectors.groupBy()方法来将数据分组,根据sex属性进行分组。然后,使用Collectors.counting()方法来统计各个性别的人数。使用Collectors.mapping()方法来将各个性别映射到相应的姓名列表。
在输出结果中,我们可以看到各个性别的人数和各个性别的姓名列表。例如,输出结果可能是:
```
各个性别的人数:{female=3, male=1}
各个性别的姓名列表:{female=[LuoTianyan, Zhang, Hu], male=[Y]}
```
从输出结果中,我们可以看到,female性别有3人,male性别有1人,并且可以看到各个性别对应的姓名列表。
JAVA8 STREAM COLLECT GROUPBY分组实例解析提供了一个强大的工具来实现数据分组和统计,通过使用Collectors.groupBy()方法和Collectors.mapping()方法,我们可以轻松地实现数据分组和统计,并且输出结果也非常直观易懂。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。