Atitit java js groupby 分组操作法

Atitit java js groupby 分组操作法

 

目录

1. 分组操作得到的数据结构Map<String, List<> 1

1.1. 1.对集合按照单个属性分组 1

2. 2对集合按照多个属性分组 1

2.1. solution 1 多个属性拼接出一个组合属性 1

2.2. solution 3 嵌套调用Java8 groupby 3

3. Js的分组 3

 

 

  1. 分组操作得到的数据结构Map<String, List<>

 

Java8的groupBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map

 

    1. 1.对集合按照单个属性分组

e.g. 按照skuId分组

 

Map<String, List<EntryDeliveryDetailywk>> detailsMap01 = dtos1.stream()

.collect(Collectors.groupingBy(EntryDeliveryDetailywk::getskuId));

 ————————————————

版权声明:本文为CSDN博主「kris999」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/kris1025/article/details/80714361

 

  1. 2对集合按照多个属性分组
    1. solution 1 多个属性拼接出一个组合属性

将多个字段拼接成一个新字段,在使用Java8的groupBy进行分组

 

Map<String, List<EntryDeliveryDetailywk>> detailmap = details.stream()

.collect(Collectors.groupingBy(d -> fetchGroupKey(d) ));

 

private String fetchGroupKey(EntryDeliveryDetailywk detail){

        return detail.getSkuId().toString()

        + detail.getItemsName()

        + detail.getWarehouseId().toString()   

        + detail.getSupplierId().toString();

    }

1

2

3

4

5

6

7

8

9

solution 2 造静态内部类

在集合元素类里构造静态内部类(成员变量即分组的对应多个属性)

e.g.

 

//静态内部类

class Person {

    public static class NameAge {

        public NameAge(String name, int age) {

            ...

        }

 

        // 注意 重写方法 must implement equals and hash function

    }

 

    public NameAge getNameAge() {

        return new NameAge(name, age);

    }

}

 

//分组

Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

    1. solution 3 嵌套调用Java8 groupby

注意得到也是嵌套map

 

Map<String, Map<Integer, List<Person>>> map = people

    .collect(Collectors.groupingBy(Person::getName,

        Collectors.groupingBy(Person::getAge));

 

//调用

map.get("Fred").get(18);

 ————————————————

 

  1. Js的分组

 

 function grp()

{

     var grpkey="cate";

 

 var storage=window.localStorage;

  for(var i=0;i<storage.length;i++){

  

  try{

var key=storage.key(i);

var v=storage.getItem(key);

var  vo=JSON.parse(v);

console.log(key);

var lst_item={};

var  grpkeyVal=vo[grpkey];

var arrlist=getGrpItemArrlistByItemkey(vo[grpkey]);

vo.localkey=key;

arrlist.push(vo);

grpObj[grpkeyVal]=arrlist;

 

  }catch(e){}

 

}

 

console.log(grpObj);

 

}

var grpObj={};

function getGrpItemArrlistByItemkey(grpkeyVal)

 {

       var arrlist=grpObj[grpkeyVal];

   if(!arrlist || arrlist.length==0 )

   {  

 arrlist=new Array();

   }

return arrlist;

 

 }

版权声明:本文为CSDN博主「kris999」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/kris1025/article/details/80714361

posted @ 2019-08-20 01:03  attilaxAti  阅读(91)  评论(0编辑  收藏  举报