使用springboot导出用以上的这个方式写一个controller,要求根据返回数据某个人数据分组之后在合并
时间: 2024-03-03 20:48:10 浏览: 60
好的,以下是根据返回数据某个人数据分组之后再合并的示例代码:
```java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RestController
public class ExportController {
@GetMapping("/export")
public Map<String, Object> export() {
// 假设这里是返回的数据
List<Map<String, Object>> dataList = new ArrayList<>();
Map<String, Object> data1 = new HashMap<>();
data1.put("name", "张三");
data1.put("age", 18);
data1.put("score", 90);
dataList.add(data1);
Map<String, Object> data2 = new HashMap<>();
data2.put("name", "李四");
data2.put("age", 20);
data2.put("score", 80);
dataList.add(data2);
Map<String, Object> data3 = new HashMap<>();
data3.put("name", "张三");
data3.put("age", 18);
data3.put("score", 95);
dataList.add(data3);
// 根据姓名分组
Map<String, List<Map<String, Object>>> groupMap = dataList.stream()
.collect(Collectors.groupingBy(map -> (String) map.get("name")));
// 合并分组后的数据
List<Map<String, Object>> resultList = new ArrayList<>();
for (Map.Entry<String, List<Map<String, Object>>> entry : groupMap.entrySet()) {
String name = entry.getKey();
List<Map<String, Object>> groupList = entry.getValue();
Map<String, Object> resultData = new HashMap<>();
resultData.put("name", name);
int totalScore = 0;
for (Map<String, Object> groupData : groupList) {
totalScore += (int) groupData.get("score");
}
resultData.put("totalScore", totalScore);
resultList.add(resultData);
}
// 返回合并后的数据
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("dataList", resultList);
return resultMap;
}
}
```
在这个示例中,我们首先使用`@RestController`注解将这个类声明为一个控制器,然后使用`@GetMapping`注解将`export`方法映射到`/export`路由上。在`export`方法中,我们首先假设这里是返回的数据,然后使用Java 8中的Stream API根据姓名分组。接着,我们遍历分组后的数据,计算每个人的总分数,并将结果放入一个新的列表中。最后,我们将合并后的数据放入一个Map中并返回。
阅读全文