List集合按数量分组

List集合按数量分组

工具类 CollectionGroupUtil

package com.ssish.wxmall.common.data;

import java.util.ArrayList;
import java.util.List;

public class CollectionGroupUtil {
    public static List groupListByQuantity(List list, int quantity) {
        if (list == null || list.size() == 0) {
            return list;
        }

        if (quantity <= 0) {
            new IllegalArgumentException("Wrong quantity.");
        }

        List wrapList = new ArrayList();
        int count = 0;
        while (count < list.size()) {
            wrapList.add(list.subList(count, (count + quantity) > list.size() ? list.size() : count + quantity));
            count += quantity;
        }

        return wrapList;
    }
}

调用

List<ActiveDataTemp> list = activeDataTempMapper.selectByExample(example);
		if(!CollectionUtils.isEmpty(list)){
			Collections.shuffle(list); //随机排序
			List<List<ActiveDataTemp>> groupList = CollectionGroupUtil.groupListByQuantity(list, 4); //每4条一组
			baseResult.setContent(list);
		}

输出结果

{
  "returnCode": "0000",
  "returnMsg": null,
  "content": [
    [
      {
        "id": 47,
        "content": "恭喜尾号8278谢老师 出单君康金生金世黄金版 1000000元",
        "type": "1",
        "status": "1"
      },
      {
        "id": 32,
        "content": "恭喜尾号2271董老师出单金生金世黄金版 50000元",
        "type": "1",
        "status": "1"
      },
      {
        "id": 34,
        "content": "恭喜尾号7592陈老师出单君康金生金世 500000元",
        "type": "1",
        "status": "1"
      },
      {
        "id": 51,
        "content": "恭喜尾号3840黄老师 出单君康金生金世黄金版 500000元",
        "type": "1",
        "status": "1"
      }
    ],  
    [
      {
        "id": 49,
        "content": "恭喜尾号8220崔老师 出单君康金生金世黄金版 2000000元",
        "type": "1",
        "status": "1"
      },
      {
        "id": 43,
        "content": "恭喜尾号2330方老师 出单信泰如意尊2.0版 600000元",
        "type": "1",
        "status": "1"
      }
    ]
  ]
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java 8的Stream API和Collectors工具类来实现集合分组并按照数量排序的操作。具体步骤如下: 1. 使用`Collectors.groupingBy`方法对集合进行分组分组的依据可以是元素本身或者根据某个属性进行分组。例如,以下代码将一个字符串集合按照首字母进行分组: ``` Map<Character, List<String>> groupMap = list.stream() .collect(Collectors.groupingBy(s -> s.charAt(0))); ``` 2. 使用`Collectors.counting`方法对分组后的每个组进行计数,得到每个组的元素数量。例如,以下代码将上一步得到的分组Map按照组内元素数量进行计数: ``` Map<Character, Long> countMap = groupMap.entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, e -> (long) e.getValue().size() )); ``` 3. 使用Java 8新的`Comparator`接口,定义一个按照Map中值的大小进行排序的比较器。例如,以下代码定义一个按照countMap中值的大小进行排序的比较器: ``` Comparator<Character> comparator = Comparator.comparing(countMap::get); ``` 4. 使用`Collectors.toMap`方法将排序后的结果转换为一个新的Map。例如,以下代码将countMap按照值的大小进行排序,并将结果保存在一个新的Map中: ``` Map<Character, Long> sortedMap = countMap.entrySet().stream() .sorted(Map.Entry.comparingByValue(comparator.reversed())) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new )); ``` 最后,得到的`sortedMap`就是按照分组后每个组的元素数量进行排序的结果。 完整代码示例: ``` List<String> list = Arrays.asList("apple", "banana", "cat", "dog", "elephant", "fig", "goat", "hippo"); Map<Character, List<String>> groupMap = list.stream() .collect(Collectors.groupingBy(s -> s.charAt(0))); Map<Character, Long> countMap = groupMap.entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, e -> (long) e.getValue().size() )); Comparator<Character> comparator = Comparator.comparing(countMap::get); Map<Character, Long> sortedMap = countMap.entrySet().stream() .sorted(Map.Entry.comparingByValue(comparator.reversed())) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new )); System.out.println(sortedMap); // 输出: {e=2, a=1, b=1, c=1, d=1, f=1, g=1, h=1} ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值