美文网首页
Java对Map集合处理使用Stream流方式

Java对Map集合处理使用Stream流方式

作者: 楼兰King | 来源:发表于2024-01-02 16:45 被阅读0次
对一组String字符串,使用谷歌的Gson转换为Map<String, List<IndicatorPageDaoBO>,在对数据进行分组统计数量操作。
实体类:
public class IndicatorPageDaoBO {
    private Long indicatorIdentifierId;
    private Long indicatorValueId;
    private String periodId;
    private String institutionCode;
    private String productCode;
    private String nodeCode;
    private BigDecimal value;
    private BigDecimal amount;
}

主方法:

import cn.hutool.json.JSONUtil;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.IndicatorPageDaoBO;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class aaaaaa {
    public static void main(String[] args) {
        String zhi="{\"125629597553664-SDXZRB0005\":[{\"periodId\":\"8ac275c57fb20c99017fd49c994c0050\",\"amount\":null,\"productCode\":\"SDXZRB0005\"," +
                "\"institutionCode\":\"125629597553664\",\"nodeCode\":\"ZBDECJ002\",\"indicatorIdentifierId\":165761,\"indicatorValueId\":91929,\"value\":0}]," +
                "\"178040247342840-SDXZRB0002\":[{\"periodId\":\"8ac275c57fb20c99017fd49c994c0050\",\"amount\":null,\"productCode\":\"SDXZRB0002\"," +
                "\"institutionCode\":\"178040247342840\",\"nodeCode\":\"BJ001test\",\"indicatorIdentifierId\":165573,\"indicatorValueId\":90923,\"value\":0}]," +
                "\"B00002-SDXZRB0005\":[{\"periodId\":\"8ac275c57fb20c99017fd49c994c0050\",\"amount\":null,\"productCode\":\"SDXZRB0005\"," +
                "\"institutionCode\":\"B00002\",\"nodeCode\":\"1234561\",\"indicatorIdentifierId\":165571,\"indicatorValueId\":90921,\"value\":0}]," +
                "\"178040247342840-SDXZRB0001\":[{\"periodId\":\"8ac275c57fb20c99017fd49c994c0050\",\"amount\":null,\"productCode\":\"SDXZRB0001\"," +
                "\"institutionCode\":\"178040247342840\",\"nodeCode\":\"SHZJ001\",\"indicatorIdentifierId\":165575,\"indicatorValueId\":89421,\"value\":0}]," +
                "\"ZJTY001-SDXZRB0005\":[{\"periodId\":\"8ac275c57fb20c99017fd49c994c0050\",\"amount\":null,\"productCode\":\"SDXZRB0005\"," +
                "\"institutionCode\":\"ZJTY001\",\"nodeCode\":\"ZBDECJ002\",\"indicatorIdentifierId\":165557,\"indicatorValueId\":89423,\"value\":0}]," +
                "\"ZZGC001-SDXZRB0005\":[{\"periodId\":\"8ac275c57fb20c99017fd49c994c0050\",\"amount\":null,\"productCode\":\"SDXZRB0005\"," +
                "\"institutionCode\":\"ZZGC001\",\"nodeCode\":\"SHZJ001\",\"indicatorIdentifierId\":165521,\"indicatorValueId\":89425,\"value\":0}," +
                "{\"periodId\":\"8ac275c57fb20c99017fd49c994c0050\",\"amount\":null,\"productCode\":\"SDXZRB0005\",\"institutionCode\":\"ZZGC001\"," +
                "\"nodeCode\":\"ZBDECJ002\",\"indicatorIdentifierId\":165579,\"indicatorValueId\":90925,\"value\":0}]}";
        Gson gson = new Gson();
        Map<String, List<IndicatorPageDaoBO>> allMap = gson.fromJson(zhi, new TypeToken<Map<String, List<IndicatorPageDaoBO>>>() {}.getType());
        System.out.println(JSONUtil.toJsonStr(allMap));
        Map<String, Long> zhiMap = allMap.entrySet().stream()
                .flatMap(entry -> entry.getValue().stream())
                .collect(Collectors.groupingBy(
                        IndicatorPageDaoBO::getInstitutionCode,
                        Collectors.mapping(
                                IndicatorPageDaoBO::getProductCode,
                                Collectors.counting()
                        )
                ));
        System.out.println("按机构分组统计每个机构下产品总数量,机构为key,总量为value"+JSONUtil.toJsonStr(zhiMap));
/**
Map<String, List<IndicatorPageDaoBO>> mapList
现在有一个map集合数据indicatorPageDaoBOS,map中value值List<IndicatorPageDaoBO>,IndicatorPageDaoBO对象中有属性institutionCode,productCode,nodeCode。最终实现结果如下:
解析mapList,解析其中的value值List<IndicatorPageDaoBO>,根据institutionCode,productCode两个属性分组统计数量,最终返回
Map<String,Long> zhiMap集合的结果,zhiMap中key为institutionCode+","+productCode这两个属性值的拼接,value是分组后统计的数量
*/
        Map<String, Long> map = allMap.entrySet().stream()
                .flatMap(entry -> entry.getValue().stream())
                .collect(Collectors.groupingBy(
                        indicator -> String.format("%s,%s", indicator.getInstitutionCode(), indicator.getProductCode()),
                        Collectors.counting()
                ));
        System.out.println("按机构和产品分组,逗号分隔机构和品作为key,value为统计总量"+JSONUtil.toJsonStr(map));

    }
}

相关文章

  • java stream操作,Collectors.groupBy

    问题描述 java 集合list调用stream转map操作,并使用Collectors.groupbying分组...

  • 2020-07-20Stream流

    Stream流的生成方式 stream流的使用 生成流通过数据源(集合,数组等)生成流list.stream() ...

  • Java8 Stream完全使用指南

    什么是Stream Stream是Java 1.8版本开始提供的一个接口,主要提供对数据集合使用流的方式进行操作,...

  • Stream知识手册

    1.流(Stream) 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不...

  • Java8 Stream 常用API详解

    Java8添加了一个新的抽象称为流Stream,可以以一种声明的方式处理数据。如 Stream不是集合元素,不是数...

  • 八 JDK8新特性——第二节 Stream流式思想

    1、使用传统的方式遍历集合 Stream 流有别于I/O流,是对集合和数组进行操作,解决集合数组的弊端 2、使用S...

  • 怎么在java 8的map中使用stream

    怎么在java 8的map中使用stream 简介 Map是java中非常常用的一个集合类型,我们通常也需要去遍历...

  • 【JAVA基础】Lambda-集合类处理

    java8中的Stream对集合功能进行了增强,以往我们经常对集合对象进行处理,比较繁琐。Stream提供了对集合...

  • Stream

    Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream 使用一...

  • 探索Java8:(一)Stream的使用

    Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream 使用一...

网友评论

      本文标题:Java对Map集合处理使用Stream流方式

      本文链接:https://www.haomeiwen.com/subject/agnpndtx.html