List -> Map 之 Collectors.groupingBy

直接上代码,也给自己提醒一下

取值用SQL:

SELECT 
	class_name
	, class_id
	, stu_name
	, stu_id
	, groups_name
	, groups_id
	, sex
FROM
    class_tb
WHERE 1=1
AND class_id ='202001'
ORDER BY groups_id, stu_id

sql中取到的结果,存到classList 中。

1、以 【GroupId】分组。此时map的key就是【GroupId】

Map<String, List<ClassName>> GroupIdMap = classList
      .stream()
      .collect(Collectors.groupingBy(ClassName::getGroupId));

     注意:因为sql中排序中有使用 group_Id 字段,此时分组之后,因为map是无序的,所以此时的map分组之后的顺序就产生了变化,后续处理如果有和排序有关的话,就要格外注意。

2、以 【sex】分组。此时map的key就是【sex】

Map<String, List<ClassName>> GroupIdMap = classList
      .stream()
      .collect(Collectors.groupingBy(ClassName::getSex));

   因为sql中的排序没有用到 sex  ,所以分组之后,顺序也不会出现变化。

3、以 【sex + GroupId】分组。此时map的key就是【sex + GroupId】

Map<String, List<ClassName>> GroupIdMap = classList
      .stream()
      .collect(Collectors.groupingBy(cls -> cls.getSex + cls.getGroupId));

   注意:此时的顺序依然会发生变化!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java 开发者 配置jdk1.8 一下是jdk1.8的新特性Lamdbd表达式 forEach循环遍历 List<String> names = new ArrayList(); names.forEach(String x -> { System.out.println(x); System.out.println(x); }); Map<String,String> map = new HashMap(); map.forEach((x,y) -> System.out.println(x+":"+y)); 集合里放对象 List<Book> books; books.forEach(x -> System.out.println(x.getBookName())); List<Map> books = new ArrayList(); Map map = new HashMap(); map.put("name","aaa"); map.put("price",33); books.forEach(x -> x.forEach(y,z) -> System.out.println(y+":"+z)); 方法引用 names.forEach(System.out::println); 等同于 names.forEach(x->System.out.println(x)) removeIf 条件移除 List<Book> books; books.removeIf(x -> x.getBookPrice() > 22); stream 对集合进行处理,并不会改变集合,类似于数据库的select 创建stream 集合.stream() 操作stream filter 过滤 map 转换 skip 跳过 distinct 去重 limit 取几条 结果处理 foreach 输出 collect 收集 count 总条数 List<String> names = ; names.add("zhangsan"); names.add("zhangsan"); List nNews = names.stream.distinct().collect(Collectors.toList()); Collectors.toSet() //取出名字长度大于4的,跳过第1个,取2个 List<String> nNames = names.stream.filter(x->x.length()>4).skip(1),limt(2).collect(Collectors.toList()); //把长度转换成一个集合 List<Integer> c = names.stream.map(x->x.length()).collect(Collectors.toList()); List<Integer> c = names.stream.map(String::length).collect(Collectors.toList());
这段代码是一个Java 8的流式API,它的作用是将一个List中的元素按照它们的"table"属性值分组,然后将分组后的结果存储到一个Map中。其中,Map的键是一个String类型,表示分组后的组名,值是一个List类型,表示属于该组的元素列表。具体的实现过程如下: ```java Map<String, List<Map>> map = param.stream() .collect(Collectors.groupingBy( i -> i.get("table").toString(), HashMap::new, Collectors.toList() )); ``` 这里使用了Java 8的流式API中的`collect`方法,它接受一个`Collector`对象作为参数,用来将流中的元素进行归约操作。在这里,我们使用了`Collectors.groupingBy`方法来进行分组操作,它接受三个参数: - 第一个参数是一个`Function`对象,用来指定分组的规则。在这里,我们使用了一个Lambda表达式`i -> i.get("table").toString()`,它表示根据每个元素的"table"属性值来进行分组。 - 第二个参数是一个`Supplier`对象,用来创建一个新的Map对象。在这里,我们使用了一个Lambda表达式`HashMap::new`,表示创建一个新的`HashMap`对象。 - 第三个参数是一个`Collector`对象,用来指定对分组后的元素如何进行归约操作。在这里,我们使用了`Collectors.toList()`方法,表示将分组后的元素存储到一个List对象中。 至于无法推断类型的问题,可能是由于代码中使用了泛型,但是没有为泛型参数指定具体的类型,导致编译器无法推断出类型。如果您能提供更多的上下文信息,我可以更好地帮助您解决这个问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值