java list 分组_java jdk1.8 使用stream流进行list 分组归类

778e3c2b4964a6575a5a6ef810e036d0.png

哈哈,当我还是学生时自学PS披的第一张图就拿来发布第一篇文章

在日常工作中我们都会遇到将数据进行分组的需求

  • 那么在Java 中如何将简单又方便的将list集合进行分组呢?
  • 在java8特性中我们可以使用stream流很方便的对集合进行操作
  • 下面将以两种方式进行分组操作(java8中还有其他操作可以分组,这里只介绍两种,其他方式大同小异)

list 分组归类代码

import com.alibaba.fastjson.JSON;import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.stream.Collectors;/** * @author caizw */public class Foo { private String name; private String type; private Double typeValue; private Integer count; public Foo(String name, String type, Double typeValue, Integer count) { this.name = name; this.type = type; this.typeValue = typeValue; this.count = count; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public Double getTypeValue() { return typeValue; } public void setTypeValue(Double typeValue) { this.typeValue = typeValue; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } @Override public String toString() { return "Foo{" + "name='" + name + ''' + ", type='" + type + ''' + ", typeValue=" + typeValue + ", count=" + count + '}'; } public static void main(String[] args) { List fooList = new ArrayList<>(); fooList.add(new Foo("A", "san", 1.0, 2)); fooList.add(new Foo("A", "nas", 13.0, 1)); fooList.add(new Foo("B", "san", 112.0, 3)); fooList.add(new Foo("C", "san", 43.0, 5)); fooList.add(new Foo("B", "nas", 77.0, 7)); List> groupList = new ArrayList<>(); // 分组方式一 fooList.stream() .collect(Collectors.groupingBy(Foo::getName, Collectors.toList())) .forEach((name, fooListByName) -> { groupList.add(fooListByName); });// 分组方式二 Map> groupMap = fooList.stream().collect(Collectors.groupingBy(Foo::getName)); System.out.println(JSON.toJSONString(groupList)); System.out.println(JSON.toJSONString(groupMap)); }}

输出结果:

  • groupList
[ [ { "count": 2, "name": "A", "type": "san", "typeValue": 1 }, { "count": 1, "name": "A", "type": "nas", "typeValue": 13 } ], [ { "count": 3, "name": "B", "type": "san", "typeValue": 112 }, { "count": 7, "name": "B", "type": "nas", "typeValue": 77 } ], [ { "count": 5, "name": "C", "type": "san", "typeValue": 43 } ]]
  • groupMap
{ "A": [ { "count": 2, "name": "A", "type": "san", "typeValue": 1 }, { "count": 1, "name": "A", "type": "nas", "typeValue": 13 } ], "B": [ { "count": 3, "name": "B", "type": "san", "typeValue": 112 }, { "count": 7, "name": "B", "type": "nas", "typeValue": 77 } ], "C": [ { "count": 5, "name": "C", "type": "san", "typeValue": 43 } ]}

刚入驻今日头条,感兴趣对童鞋可以关注本作者。后期会慢慢分享一些教程以及经验。打算后期为大家写一个简易的微服务教程,以及作者使用微服务在开发中遇到的一些问题,以及怎么解决的经验分享给大家!自动化部署项目等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值