Java的8名单<地图<字符串,对象>>到列表<地图<字符串,对象>>的键组和值数

Jhuamnchumo:

我有地图下面的列表

List<Map<String, Object>> listBeforeGroup = new ArrayList<Map<String, Object>>();

    Map<String, Object> m1 = new HashMap<String, Object>();
    m1.put("company", "LG");
    m1.put("billType", "A");
    m1.put("billPeriod", "09-2018");

    Map<String, Object> m2 = new HashMap<String, Object>();
    m2.put("company", "LG");
    m2.put("billType", "A");
    m2.put("billPeriod", "09-2018");

    Map<String, Object> m3 = new HashMap<String, Object>();
    m3.put("company", "LG");
    m3.put("billType", "A");
    m3.put("billPeriod", "09-2018");

    Map<String, Object> m4 = new HashMap<String, Object>();
    m4.put("company", "LG");
    m4.put("billType", "B");
    m4.put("billPeriod", "01-2019");

    Map<String, Object> m5 = new HashMap<String, Object>();
    m5.put("company", "LG");
    m5.put("billType", "B");
    m5.put("billPeriod", "01-2019");

    Map<String, Object> m6 = new HashMap<String, Object>();
    m6.put("company", "Samsung");
    m6.put("billType", "A");
    m6.put("billPeriod", "10-2018");

    Map<String, Object> m7 = new HashMap<String, Object>();
    m7.put("company", "Samsung");
    m7.put("billType", "A");
    m7.put("billPeriod", "10-2018");

    Map<String, Object> m8 = new HashMap<String, Object>();
    m8.put("company", "Samsung");
    m8.put("billType", "B");
    m8.put("billPeriod", "11-2018");

    listBeforeGroup.add(m1);listBeforeGroup.add(m2);
    listBeforeGroup.add(m3);listBeforeGroup.add(m4);
    listBeforeGroup.add(m5);listBeforeGroup.add(m6);

我如何获得这个输出?

    //Desired Output - List<Map<String, Object>>
    //{company=LG, billType=A, billPeriod=09-2018, count=3}
    //{company=LG, billType=B, billPeriod=01-2019, count=2}
    //{company=Samsung, billType=A, billPeriod=10-2018, count=2}
    //{company=Samsung, billType=B, billPeriod=11-2018, count=1}

我想这一点,使用Java 8流,但我不能得到所需的输出

List<Map<String, Object>> listAfterGroup = listBeforeGroup.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(p -> p.getKey(), p - >  p.getValue()))).collect(Collectors.toList());

并试图此,顺便说一句这个解决方案提供了一个地图,但我不希望这样

Map<Object, Long> listAfterGroup = listBeforeGroup.stream().flatMap(m -> m.entrySet().stream()).collect(Collectors.groupingBy(Map.Entry::getKey,Collectors.counting()));

我想GROUP BY键“billPeriod”例如地图,并通过数值计算的项目,然后生成地图的新列表。

尼古拉斯·K:

你可以创建一个类Company,然后后续的操作变得更加简单。

class Company {
    String company;
    String billType;
    String billPeriod;

    public Company(String company, String billType, String billPeriod) {
        this.company = company;
        this.billType = billType;
        this.billPeriod = billPeriod;
    }

    // getters, setters, toString, etc
}

初始化列表:

List<Company> list = new ArrayList<>();
list.add(new Company("LG", "A", "09-2018"));
list.add(new Company("LG", "A", "09-2018"));
list.add(new Company("LG", "A", "09-2018"));
list.add(new Company("LG", "B", "01-2019"));
list.add(new Company("LG", "B", "01-2019"));
list.add(new Company("Samsung", "A", "10-2018"));
list.add(new Company("Samsung", "A", "10-2018"));
list.add(new Company("Samsung", "B", "11-2018"));

现在为例,可以通过公司名称组:

Map<String, Long> map = list.stream().collect(
        Collectors.groupingBy(Company::getCompany, 
                              Collectors.mapping((Company c) -> c, Collectors.counting())));

现在,它变得更加容易,你的愿望执行其他操作。另外,在这里,而不是创建8个地图你最终处理的只是1名单

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java的8流,对象的转换列表地图<字符串,将<字符串>>

创建地图字符串和对象在Java中的列表8

Java8流列表<地图<字符串,对象>> groupingBy和计数值

地图<字符串,地图<对象,对象>>如何获得值对动态java中

地图<字符串,地图<字符串,租车>>到列表<汽车>使用Java 8

收集列表<对象>地图<字符串,列表<对象>>中的Java 8中使用流

地图字符串数组列表获取键和值

Java的8个流 - 查找最大计数值地图<字符串,列表<对象>>

Java流:发行约收集到地图<字符串,对象>

迭代虽然地图<字符串,列表<对象的内容>>和分配列表<对象的值>成单独的列表<双>

Java的游戏 - 绑定对象的列表,并附有地图<字符串,AnotherObject>内

Java的8炼油LAMBDA地图<字符串,列表<字符串>>将字符串地图关键要求

Java流通过分组名单<地图<字符串,对象>>地图<整数,是List <Integer >>

比较一个List <地图<String,字符串>>到一个List <地图<字符串,对象>> Java的

减少地图(地图(地图(列表(字符串))))地形

来自地图对象的 Grep 字符串

名单<地图<String,字符串>> VS列表<OBJECT>

Java的8个流地图<字符串,列表<字符串值>>为每个关键总和

如何名单<人>转换地图<字符串,列表<双>>,而不是地图<字符串,列表<人>>?

变换一个List <对象>的地图<字符串,整数>使得字符串不是使用Java 8流重复值

上的地图的未经检查的铸件<字符串,对象>(JSON转换为地图和Jackson)

Java的8 STREM过滤图在地图 - 地图<字符串,地图<字符串,员工>>

地图JSON为List <地图<<字符串,对象>>

创建使用Java 8流API字符串和排序列表中的地图

拼合一个地图<整数,列表<字符串>>地图<字符串,整数>用流和lambda

Java流列表<地图<字符串,双>>基于字符串需要平均

删除从地图字符串到列表几个元素特定的键

Java类扩展的HashMap <字符串,地图<字符串,列表<字符串>>重写方法放不工作

转换地图<字符串,对象>地图<字符串,请设置<对象>>带有过滤器和流