数据分组(使用stream流)

一、原数据查询格式

{
	"total": 27,
	"rows": [
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:38",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:38",
			"id": 425,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期四",
			"bclb": "白班",
			"banciT": "江苏0830-1730",
			"pdate": "08:30-17:30",
			"ptime": "12:30-13:30",
			"btime": "07:56",
			"etime": "21:32",
			"znote": null,
			"zdkxq": "07:56,08:14,20:02,21:32",
			"zthsb": null,
			"fadate": "20240201",
			"wdate": "2024-02-04 04:31:55",
			"delFlag": "0"
		},
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:38",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:38",
			"id": 1605,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期五",
			"bclb": "白班",
			"banciT": "江苏0830-1730",
			"pdate": "08:30-17:30",
			"ptime": "12:30-13:30",
			"btime": "08:15",
			"etime": "17:55",
			"znote": null,
			"zdkxq": "08:15,17:55",
			"zthsb": null,
			"fadate": "20240202",
			"wdate": "2024-02-05 04:31:52",
			"delFlag": "0"
		},
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:38",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:38",
			"id": 2802,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期六",
			"bclb": "白班",
			"banciT": "江苏0830-1730",
			"pdate": "08:30-17:30",
			"ptime": "12:30-13:30",
			"btime": "07:51",
			"etime": "17:32",
			"znote": null,
			"zdkxq": "07:51,17:32",
			"zthsb": null,
			"fadate": "20240203",
			"wdate": "2024-02-06 04:31:42",
			"delFlag": "0"
		},
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:38",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:38",
			"id": 3274,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期日",
			"bclb": "休息",
			"banciT": "江苏0830-1730假",
			"pdate": null,
			"ptime": "00:00-08:30,12:30-13:30,17:30-18:00",
			"btime": null,
			"etime": null,
			"znote": null,
			"zdkxq": null,
			"zthsb": null,
			"fadate": "20240204",
			"wdate": "2024-02-07 04:31:37",
			"delFlag": "0"
		},
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:38",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:38",
			"id": 4156,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期一",
			"bclb": "白班",
			"banciT": "江苏0830-1730",
			"pdate": "08:30-17:30",
			"ptime": "12:30-13:30",
			"btime": "08:11",
			"etime": "18:58",
			"znote": null,
			"zdkxq": "08:11,18:58",
			"zthsb": null,
			"fadate": "20240205",
			"wdate": "2024-02-08 04:31:51",
			"delFlag": "0"
		},
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:38",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:38",
			"id": 5219,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期二",
			"bclb": "白班",
			"banciT": "江苏0830-1730",
			"pdate": "08:30-17:30",
			"ptime": "12:30-13:30",
			"btime": "08:04",
			"etime": "17:31",
			"znote": null,
			"zdkxq": "08:04,08:24",
			"zthsb": "是",
			"fadate": "20240206",
			"wdate": "2024-02-09 04:31:53",
			"delFlag": "0"
		},
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:38",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:38",
			"id": 6393,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期三",
			"bclb": "休息",
			"banciT": "江苏0830-1730假",
			"pdate": null,
			"ptime": "00:00-08:30,12:30-13:30,17:30-18:00",
			"btime": null,
			"etime": null,
			"znote": null,
			"zdkxq": null,
			"zthsb": null,
			"fadate": "20240207",
			"wdate": "2024-02-10 04:31:40",
			"delFlag": "0"
		},
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:38",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:38",
			"id": 6789,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期四",
			"bclb": "休息",
			"banciT": "江苏0830-1730假",
			"pdate": null,
			"ptime": "00:00-08:30,12:30-13:30,17:30-18:00",
			"btime": null,
			"etime": null,
			"znote": null,
			"zdkxq": null,
			"zthsb": null,
			"fadate": "20240208",
			"wdate": "2024-02-11 04:31:33",
			"delFlag": "0"
		},
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:39",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:39",
			"id": 7685,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期五",
			"bclb": "休息",
			"banciT": "江苏0830-1730假",
			"pdate": null,
			"ptime": "00:00-08:30,12:30-13:30,17:30-18:00",
			"btime": null,
			"etime": null,
			"znote": null,
			"zdkxq": null,
			"zthsb": null,
			"fadate": "20240209",
			"wdate": "2024-02-12 04:31:55",
			"delFlag": "0"
		},
		{
			"createBy": "Task",
			"createName": "Task",
			"createTime": "2024-02-28T08:55:39",
			"updateBy": "Task",
			"updateName": "Task",
			"updateTime": "2024-02-28T08:55:39",
			"id": 8407,
			"pernr": "139000",
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": "星期六",
			"bclb": "休息",
			"banciT": "江苏0830-1730假",
			"pdate": null,
			"ptime": "00:00-08:30,12:30-13:30,17:30-18:00",
			"btime": null,
			"etime": null,
			"znote": null,
			"zdkxq": null,
			"zthsb": null,
			"fadate": "20240210",
			"wdate": "2024-02-13 04:31:34",
			"delFlag": "0"
		}
	],
	"code": 200,
	"msg": "查询成功"
}

原数据格式为每条显示,但数据中有很多重复的信息 需要分组显示如下列格式:

{
	"total": 1,
	"rows": [
		{
			"pnalt": "139000",
			"name": "陈sir",
			"gender": "男",
			"orgeh": "开发部",
			"rmark": null,
			"bclb": null,
			"btime": null,
			"etime": null,
			"fadate": null,
			"info": [
				{
					"20240201": {
						"btime": "07:56",
						"rmark": "星期四",
						"etime": "21:32",
						"bclb": "白班"
					}
				},
				{
					"20240202": {
						"btime": "08:15",
						"rmark": "星期五",
						"etime": "17:55",
						"bclb": "白班"
					}
				},
				{
					"20240203": {
						"btime": "07:51",
						"rmark": "星期六",
						"etime": "17:32",
						"bclb": "白班"
					}
				},
				{
					"20240204": {
						"btime": "null",
						"rmark": "星期日",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240205": {
						"btime": "08:11",
						"rmark": "星期一",
						"etime": "18:58",
						"bclb": "白班"
					}
				},
				{
					"20240206": {
						"btime": "08:04",
						"rmark": "星期二",
						"etime": "17:31",
						"bclb": "白班"
					}
				},
				{
					"20240207": {
						"btime": "null",
						"rmark": "星期三",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240208": {
						"btime": "null",
						"rmark": "星期四",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240209": {
						"btime": "null",
						"rmark": "星期五",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240210": {
						"btime": "null",
						"rmark": "星期六",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240211": {
						"btime": "null",
						"rmark": "星期日",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240212": {
						"btime": "null",
						"rmark": "星期一",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240213": {
						"btime": "null",
						"rmark": "星期二",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240214": {
						"btime": "null",
						"rmark": "星期三",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240215": {
						"btime": "null",
						"rmark": "星期四",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240216": {
						"btime": "null",
						"rmark": "星期五",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240217": {
						"btime": "null",
						"rmark": "星期六",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240218": {
						"btime": "null",
						"rmark": "星期日",
						"etime": "null",
						"bclb": "白班"
					}
				},
				{
					"20240219": {
						"btime": "null",
						"rmark": "星期一",
						"etime": "null",
						"bclb": "白班"
					}
				},
				{
					"20240220": {
						"btime": "08:29",
						"rmark": "星期二",
						"etime": "20:00",
						"bclb": "白班"
					}
				},
				{
					"20240221": {
						"btime": "08:25",
						"rmark": "星期三",
						"etime": "20:08",
						"bclb": "白班"
					}
				},
				{
					"20240222": {
						"btime": "08:12",
						"rmark": "星期四",
						"etime": "20:27",
						"bclb": "白班"
					}
				},
				{
					"20240223": {
						"btime": "08:13",
						"rmark": "星期五",
						"etime": "20:13",
						"bclb": "白班"
					}
				},
				{
					"20240224": {
						"btime": "08:19",
						"rmark": "星期六",
						"etime": "18:05",
						"bclb": "休息"
					}
				},
				{
					"20240225": {
						"btime": "null",
						"rmark": "星期日",
						"etime": "null",
						"bclb": "休息"
					}
				},
				{
					"20240226": {
						"btime": "08:11",
						"rmark": "星期一",
						"etime": "20:06",
						"bclb": "白班"
					}
				},
				{
					"20240227": {
						"btime": "08:00",
						"rmark": "星期二",
						"etime": "20:05",
						"bclb": "白班"
					}
				}
			]
		}
	],
	"code": 200,
	"msg": "查询成功"
}

二、实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AttendanceStructureVo {

    
    private String pnalt;

   
    private String name;

    private String gender;

    private String orgeh;

    private String rmark;

    private String bclb;

    private String btime;
  
    private String etime;

    private String fadate;

    private List<Map<String, Map<String, String>>> info;

    public AttendanceStructureVo(String pnalt, String name, String gender, String orgeh, List<Map<String, Map<String, String>>> info) {
        this.pnalt = pnalt;
        this.name = name;
        this.gender = gender;
        this.orgeh = orgeh;
        this.info = info;
    }

}

三、代码展示

 @Override
    public TableDataInfo<AttendanceStructureVo> selectAttendanceGrouping(AttendanceBo bo, PageQuery pageQuery) {
        List<AttendanceStructureVo> entityList = bAttendanceMapper.selectAttendanceGrouping(bo);
        List<AttendanceStructureVo> result = new ArrayList<>();
        if (entityList.size() > 0) {
            result = entityList.stream()
                    .collect(Collectors.groupingBy(AttendanceStructureVo::getPnalt)) // 先按工号分组
                    .entrySet().stream()
                    .map(entry -> {
                        String pnalt = entry.getKey();
                        List<Map<String, Map<String, String>>> info = entry.getValue().stream()
                                .collect(Collectors.groupingBy(AttendanceStructureVo::getFadate, LinkedHashMap::new, Collectors.toCollection(LinkedHashSet::new)))
                                .entrySet().stream()
                                .map(dateEntry -> {
                                    Map<String, String> mapValue = new HashMap<>();
                                    mapValue.put("bclb", dateEntry.getValue().stream().map(AttendanceStructureVo::getBclb).collect(Collectors.joining(",")));
                                    mapValue.put("rmark", dateEntry.getValue().stream().map(AttendanceStructureVo::getRmark).collect(Collectors.joining(",")));
                                    mapValue.put("btime", dateEntry.getValue().stream().map(AttendanceStructureVo::getBtime).collect(Collectors.joining(",")));
                                    mapValue.put("etime", dateEntry.getValue().stream().map(AttendanceStructureVo::getEtime).collect(Collectors.joining(",")));

                                    Map<String, Map<String, String>> dateInfo = new TreeMap<>();
                                    dateInfo.put(dateEntry.getKey(), mapValue);
                                    return dateInfo;
                                })
                                .collect(Collectors.toList());

                        return new AttendanceStructureVo(pnalt, entry.getValue().get(0).getName(), entry.getValue().get(0).getGender(), entry.getValue().get(0).getOrgeh(), info);
                    })
                    .collect(Collectors.toList());
        }

        Page<AttendanceStructureVo> page = new Page<>();
        if (pageQuery.getPageNum() != null && pageQuery.getPageSize() != null) {
            page.setCurrent(pageQuery.getPageNum());
            page.setSize(pageQuery.getPageSize());

            // 手动分页,获取当前页的数据列表
            int startIndex = (int) ((page.getCurrent() - 1) * page.getSize());
            int endIndex = (int) Math.min(startIndex + page.getSize(), result.size());
            List<AttendanceStructureVo> currentList = result.subList(startIndex, endIndex);

            // 设置总记录数和当前页数据列表
            page.setTotal(result.size());
            page.setRecords(currentList);
        } else {
            page.setRecords(result);
            page.setTotal(result.size());
        }
        return TableDataInfo.build(page);
    }

### 如何在 Linux 上安装 Google 软件 #### 安装 Google Chrome 浏览器 要在 Linux 系统上安装 Google Chrome 浏览器,可以通过图形界面或命令行实现。以下是具体方法: 1. **通过图形界面下载并安装** 使用系统的默认浏览器访问 [Google Chrome 的官方网站](http://www.google.cn/intl/en_us/chrome/) 并根据操作系统选择合适的版本进行下载[^1]。对于基于 Debian 的系统(如 Ubuntu),会得到 `.deb` 文件;而对于基于 Red Hat 的系统(如 Fedora 或 CentOS),则会获得 `.rpm` 文件。 2. **通过命令行下载和安装** 对于喜欢使用终端的用户,可以直接利用 `wget` 命令获取安装包,并通过相应的工具完成安装过程。 - 下载适用于 Debian 及其衍生发行版的 `.deb` 文件: ```bash wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb ``` - 安装 `.deb` 文件前可能需要先安装 `gdebi` 工具来简化依赖关系处理: ```bash sudo apt update && sudo apt install gdebi-core ``` - 接着使用 `gdebi` 来安装已下载的文件: ```bash sudo gdebi google-chrome-stable_current_amd64.deb ``` 如果是在基于 RPM 的系统上,则需按照以下方式操作: - 首先下载 `.rpm` 文件: ```bash wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm ``` - 然后使用 `rpm` 或者 `yum`/`dnf` 进行安装: ```bash sudo rpm -ivh google-chrome-stable_current_x86_64.rpm ``` 或者 ```bash sudo yum localinstall google-chrome-stable_current_x86_64.rpm ``` 3. **配置自动更新机制** 添加官方存储库以便日后能够方便地接收安全补丁和其他改进。这一步骤因不同类型的 Linux 发行版而异。 - 在基于 Debian 的系统中添加如下内容到 `/etc/apt/sources.list.d/google-chrome.list` 中: ```plaintext deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main ``` 同时导入公钥以验证软件的真实性: ```bash wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - ``` - 对于基于 RPM 的系统,可参照类似的步骤设置 YUM/DNF 存储库[^2]。 #### 安装其他 Google 提供的服务或应用 除了 Chrome 外,还有许多其他的 Google 应用和服务可以在 Linux 上运行或者集成,比如 Gmail Offline、Google Drive 客户端以及 Android Studio 开发环境等。这些通常不会像 Chrome 一样提供原生二进制包形式分发给各主 Linux 版本,因此有时需要借助第三方解决方案或是虚拟化技术才能正常使用。 - **Gmail Offline**: 用户可通过 Chromium 插件商店加载未打包扩展的方式手动启用离线功能[^5]。 - **Google Drive 客户端**: 尽管官方并未推出针对 Linux 的同步客户端,但有多个社区开发项目填补了这一空白,例如 `rclone`, `drive-cli-sync` 和 `insync` 等[^3]。 - **Android Studio**: 此 IDE 支持跨平台部署,只需前往开发者页面下载对应架构压缩档解压即可启动[^4]。 ```python import os os.system('sudo apt-get update') print("System updated successfully.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值