Java通过steam实现数据分组

目录

1、添加依赖

2、实体类

3、实现方法

3.1 原始数据

3.2 业务实际使


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"
}]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码奴生来只知道前进~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值