如何使用java8的stream实现mysql的select group by 功能
时间: 2023-11-27 09:50:48 浏览: 170
java8 stream 操作map根据key或者value排序的实现
可以使用Java 8的Stream API和Collectors工具类来实现MySQL的SELECT GROUP BY功能。
假设有一个名为Person的实体类,其中包含id、name和age三个属性,现在需要对这个实体类进行按照age分组并统计每组的数量。
可以按照以下步骤实现:
1. 从数据库中获取数据并转换为Person对象列表
```
List<Person> persons = jdbcTemplate.query("SELECT * FROM person", new BeanPropertyRowMapper<>(Person.class));
```
2. 使用Stream API对列表进行分组和统计
```
Map<Integer, Long> groupResult = persons.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
```
上述代码中,使用Stream API中的`groupingBy`方法将列表按照age属性进行分组,然后使用`counting`方法统计每个分组的数量。
3. 输出结果
```
groupResult.forEach((age, count) -> System.out.println("age: " + age + ", count: " + count));
```
完整代码示例:
```
List<Person> persons = jdbcTemplate.query("SELECT * FROM person", new BeanPropertyRowMapper<>(Person.class));
Map<Integer, Long> groupResult = persons.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
groupResult.forEach((age, count) -> System.out.println("age: " + age + ", count: " + count));
```
注意:需要引入`java.util.stream.Collectors`和`org.springframework.jdbc.core.BeanPropertyRowMapper`两个类。
阅读全文