mybatisplus 怎么写groupby和count并且用stream流转成Map<String,Integer>返回
时间: 2024-05-02 09:19:15 浏览: 17
关于mybatisplus如何写groupby和count,可以使用mybatisplus提供的wrapper来实现。
示例代码如下:
```java
QueryWrapper<MyEntity> wrapper = new QueryWrapper<>();
wrapper.select("col_name1 AS name, COUNT(col_name2) AS count")
.groupBy("col_name1");
List<MyEntity> list = myEntityMapper.selectList(wrapper);
Map<String, Integer> result = list.stream()
.collect(Collectors.toMap(MyEntity::getName, MyEntity::getCount));
```
其中,MyEntity是对应表的实体类,col_name1和col_name2是对应表的列名。
首先使用wrapper.select()方法来指定查询的列和count,使用wrapper.groupBy()方法指定分组的列,然后使用myEntityMapper.selectList()方法来查询数据。
最后使用Java 8的stream流来将查询结果转成Map<String, Integer>。
相关问题
Map<String, Map<String,Integer>> countSum 根据String 分组
,如何计算每个分组内Integer的和?
可以使用两层循环,外层循环遍历每个String分组,内层循环遍历每个分组中的Map,然后将每个Map中的Integer值相加,最后得到每个分组内的整数和。代码示例如下:
```
Map<String, Map<String, Integer>> countSum = new HashMap<>();
// 遍历每个String分组
for (String key : countSum.keySet()) {
int sum = 0;
Map<String, Integer> group = countSum.get(key);
// 遍历每个分组中的Map,并将每个Map中的Integer值相加
for (String innerKey : group.keySet()) {
sum += group.get(innerKey);
}
// 输出每个分组内的整数和
System.out.println("Group " + key + " sum: " + sum);
}
```
对 Map<String, List<Map<String, Object>>>中的list group by 并且生成Map<String,Map<String, List<Map<String, Object>>>>
可以使用Java 8的Stream API来对Map<String, List<Map<String, Object>>>中的list进行分组,并生成Map<String, Map<String, List<Map<String, Object>>>>。下面是一个示例代码:
```java
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupByExample {
public static void main(String[] args) {
Map<String, List<Map<String, Object>>> originalMap = ...; // 原始的Map<String, List<Map<String, Object>>>对象
Map<String, Map<String, List<Map<String, Object>>>> groupedMap = originalMap.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().stream()
.collect(Collectors.groupingBy(
map -> (String) map.get("groupKey")
))
));
System.out.println(groupedMap);
}
}
```
在上面的代码中,我们使用了`Collectors.groupingBy`方法来对list进行分组,分组的依据是list中每个Map对象的`groupKey`属性的值。最终,我们将分组结果存储在一个新的Map对象`groupedMap`中。