• 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

  • 相关阅读:
    MyEclipse使用总结——MyEclipse10安装SVN插件
    SVN的安装和配置
    Git
    myeclipse 怎么安装与激活
    jQuery
    sql server 2008
    原问题:身份证为什么只有15位
    QTP10破解方法及mgn-mqt82.exe下载
    WARNING [Project: :app] To shrink resources you must also enable ProGuard
    your local changes would be overwritten by merge. commit stash or revert them to proceed. view them
  • 原文地址:https://www.cnblogs.com/attilax/p/15197149.html
Copyright © 2020-2023  润新知