目录
1、添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
</dependency>
2、实体类
package com.shucha.deveiface.biz.test;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.sdy.common.utils.DateUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author tqf
* @Description
* @Version 1.0
* @since 2022-06-30 14:48
*/
@Data
public class EmployData {
@ExcelProperty(value = "标题",index = 0)
@ApiModelProperty(value = "标题")
private String title;
@ExcelProperty(value = "供稿处室",index = 1)
@ApiModelProperty(value = "供稿处室")
private String contributorsOffice;
@ExcelProperty(value = "平台管理名称",index = 2)
@ApiModelProperty(value = "平台管理名称")
private String platformManagementName;
@ApiModelProperty(value = "平台管理名称-ID")
private Long platFormId;
@ExcelProperty(value = "录用栏目",index = 3)
@ApiModelProperty(value = "录用栏目")
private String employedColumn;
@ExcelProperty(value = "录用时间",index = 4)
@ApiModelProperty(value = "录用时间")
@JsonFormat(pattern = DateUtil.DATETIME_FORMAT)
private Date employedTime;
@ExcelProperty(value = "加分数",index = 5)
@ApiModelProperty(value = "加分数")
private Integer score;
}
package com.shucha.deveiface.biz.test;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author tqf
* @Description
* @Version 1.0
* @since 2022-06-30 14:53
*/
@Data
public class EmployDataDTO {
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "供稿处室")
private String contributorsOffice;
@ApiModelProperty(value = "子类列表")
private List<EmployData> sonDataList;
}
3、实现方法
package com.shucha.deveiface.biz.test;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author tqf
* @Description 多条数据根据相同的某个属性分组
* @Version 1.0
* @since 2022-07-19 10:18
*/
public class ReadeEmployExcelData {
private final static String data = "[{\"contributorsOffice\":\"炫迈供稿处\",\"employedColumn\":\"cctv-1\",\"employedTime\":1654790400000,\"platformManagementName\":\"查询平台\",\"score\":201,\"title\":\"导入测试1\"},{\"contributorsOffice\":\"炫迈供稿处\",\"employedColumn\":\"cctv-2\",\"employedTime\":1654876800000,\"platformManagementName\":\"共享平台\",\"score\":100,\"title\":\"导入测试1\"},{\"contributorsOffice\":\"绿箭供稿处\",\"employedColumn\":\"cctv-3\",\"employedTime\":1654963200000,\"platformManagementName\":\"查询平台\",\"score\":8,\"title\":\"导入测试2\"},{\"contributorsOffice\":\"绿箭供稿处\",\"employedColumn\":\"cctv-4\",\"employedTime\":1655049600000,\"platformManagementName\":\"共享平台\",\"score\":10,\"title\":\"导入测试2\"},{\"contributorsOffice\":\"绿箭供稿处\",\"employedColumn\":\"cctv-5\",\"employedTime\":1655136000000,\"platformManagementName\":\"测试平台\",\"score\":300,\"title\":\"导入测试2\"}]";
public static void main(String[] args) {
getExcelData();
}
public static void getExcelData(){
List<EmployData> list = JSON.parseArray(data, EmployData.class);
System.out.println(JSON.toJSONString(list));
Map<String, List<EmployData>> mapData = list.stream().collect(Collectors.groupingBy(EmployData::getTitle));
// 通过标题分组
System.out.println("分组之后的数据结构:" + JSON.toJSONString(mapData));
List<EmployDataDTO> dtoList = new ArrayList<>();
for (Map.Entry<String, List<EmployData>> entry : mapData.entrySet()) {
EmployDataDTO dataDTO = new EmployDataDTO();
dataDTO.setTitle(entry.getKey());
dataDTO.setContributorsOffice(entry.getValue().get(0).getContributorsOffice());
dataDTO.setSonDataList(entry.getValue());
dtoList.add(dataDTO);
}
System.out.println("业务使用结构:" + JSON.toJSONString(dtoList));
String jsonString = JSON.toJSONString(dtoList, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteDateUseDateFormat);
System.out.println("json格式输出:"+ jsonString);
}
}
3.1 原始数据
[{
"contributorsOffice": "炫迈供稿处",
"employedColumn": "cctv-1",
"employedTime": 1654790400000,
"platformManagementName": "查询平台",
"score": 201,
"title": "导入测试1"
}, {
"contributorsOffice": "炫迈供稿处",
"employedColumn": "cctv-2",
"employedTime": 1654876800000,
"platformManagementName": "共享平台",
"score": 100,
"title": "导入测试1"
}, {
"contributorsOffice": "绿箭供稿处",
"employedColumn": "cctv-3",
"employedTime": 1654963200000,
"platformManagementName": "查询平台",
"score": 8,
"title": "导入测试2"
}, {
"contributorsOffice": "绿箭供稿处",
"employedColumn": "cctv-4",
"employedTime": 1655049600000,
"platformManagementName": "共享平台",
"score": 10,
"title": "导入测试2"
}, {
"contributorsOffice": "绿箭供稿处",
"employedColumn": "cctv-5",
"employedTime": 1655136000000,
"platformManagementName": "测试平台",
"score": 300,
"title": "导入测试2"
}]
3.2 业务实际使
[{
"contributorsOffice": "绿箭供稿处",
"sonDataList": [{
"contributorsOffice": "绿箭供稿处",
"employedColumn": "cctv-3",
"employedTime": 1654963200000,
"platformManagementName": "查询平台",
"score": 8,
"title": "导入测试2"
}, {
"contributorsOffice": "绿箭供稿处",
"employedColumn": "cctv-4",
"employedTime": 1655049600000,
"platformManagementName": "共享平台",
"score": 10,
"title": "导入测试2"
}, {
"contributorsOffice": "绿箭供稿处",
"employedColumn": "cctv-5",
"employedTime": 1655136000000,
"platformManagementName": "测试平台",
"score": 300,
"title": "导入测试2"
}],
"title": "导入测试2"
}, {
"contributorsOffice": "炫迈供稿处",
"sonDataList": [{
"contributorsOffice": "炫迈供稿处",
"employedColumn": "cctv-1",
"employedTime": 1654790400000,
"platformManagementName": "查询平台",
"score": 201,
"title": "导入测试1"
}, {
"contributorsOffice": "炫迈供稿处",
"employedColumn": "cctv-2",
"employedTime": 1654876800000,
"platformManagementName": "共享平台",
"score": 100,
"title": "导入测试1"
}],
"title": "导入测试1"
}]