list分组

随风2020 / 2024-02-29 / 原文

package org.ofdrw.layout;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args) {
        List<VO> voList = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            voList.add(new VO("test" + i, i));
        }
        for (int i = 1; i <= 10; i++) {
            voList.add(new VO("test" + i, i));
        }
        for (int i = 1; i <= 10; i++) {
            voList.add(new VO("test" + i, i));
        }
        for (int i = 1; i <= 10; i++) {
            voList.add(new VO("test" + i, i));
        }
        int total = 0;
        int page = 0;
        Map<String, List<VO>> groupedMap = new LinkedHashMap<>(); // 创建槽位集合
        for (VO vo : voList) {
            total += vo.getLine();
            String category = new Test().getCategory(total, page); // 获取当前元素的分类标准
            if (!groupedMap.containsKey(category)) {
                if ((total - vo.getLine()) % 42 != 0) {
                    total = page * 42 + vo.getLine();
                }
                page += 1;
                groupedMap.put(category, new ArrayList<>()); // 若槽位不存在,则新建一个空列表作为槽位
            }
            groupedMap.get(category).add(vo); // 将元素添加到相应的槽位中
        }
        for (String key : groupedMap.keySet()) {
            System.out.println("key:" + key);
        }

        // System.out.println(groupedMap);
        for (List<VO> voList1 : groupedMap.values()) {
            System.out.println(voList1.stream().mapToInt(VO::getLine).sum());
            System.out.println(voList1.stream().map(item -> String.valueOf(item.getLine())).collect(Collectors.joining(",")));
        }
    }

    public String getCategory(int total, int page) {
        // 这里只是一个示例,根据实际情况自定义分类规则
        if (page == 0) {
            page = 1;
        }
        if (total > (42 * page)) {
            page += 1;
        }
        return "pageNo" + page;
    }
}