stream的groupingby_handlemapping

stream的groupingby_handlemappinggroupingBy用于分组,toMap用于list转map测试代码:1.建一个实体类,测试中用packagecom.xhx.java;/***xuhaixing*2018/7/2021:43**/publicclassStudent{privateStringname;privateStringsex;priva…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

groupingBy用于分组,toMap用于list转map

测试代码:

1.建一个实体类,测试中用

package com.xhx.java;

/**
 * xuhaixing
 * 2018/7/20 21:43
 **/
public class Student {
    private String name;
    private String sex;
    private double money;

    public Student(String name, String sex, double money) {
        this.name = name;
        this.sex = sex;
        this.money = money;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", money=" + money +
                '}';
    }
}

 

2.具体测试代码及输出结果

package com.xhx.java;

import org.junit.Test;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collector;
import java.util.stream.Collectors;

/**
 * xuhaixing
 * 2018/7/20 21:44
 **/
public class TestCollectors {

    /**
     * Collectors.groupingBy 分组1
     */
    @Test
    public void testGrouping() {
        List<String> items = Arrays.asList("apple", "banana", "apple", "orange", "banana");
        Collector<Object, ?, Map<Object, Long>> objectMapCollector = Collectors.groupingBy(Function.identity(), Collectors.counting());
        Map<Object, Long> collect = items.stream().collect(objectMapCollector);
        System.out.println(collect);
        //{orange=1, banana=2, apple=2}
    }

    /**
     * Collectors.groupingBy 分组2
     */
    @Test
    public void testGrouping2() {
        List<Student> students = Arrays.asList(new Student("apple", "男", 10.0),
                new Student("banana", "男", 10.0),
                new Student("orange", "男", 20.0),
                new Student("pipe", "女", 40.0),
                new Student("pinck", "女", 80.0)
        );

        //根据sex分组
        Map<String, List<Student>> collect = students.stream().collect(Collectors.groupingBy(Student::getSex));
        System.out.println(collect);
        //{
        // 女=[Student{name='pipe', sex='女', money=40.0}, Student{name='pinck', sex='女', money=80.0}],
        // 男=[Student{name='apple', sex='男', money=10.0}, Student{name='banana', sex='男', money=10.0}, Student{name='orange', sex='男', money=20.0}]
        // }

        //根据sex分组,然后对money求和
        Map<String, Double> collect1 = students.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.summingDouble(Student::getMoney)));
        System.out.println(collect1);
        //{女=120.0, 男=40.0}
    }

    /**
     * list、set
     */
    @Test
    public void testGrouping3() {
        List<Student> students = Arrays.asList(new Student("apple", "男", 10.0),
                new Student("banana", "男", 10.0),
                new Student("orange", "男", 20.0),
                new Student("pipe", "女", 40.0),
                new Student("pinck", "女", 80.0)
        );
        Map<String, List<Student>> collect1 = students.stream().collect(Collectors.groupingBy(Student::getSex));
        System.out.println(collect1);
        //{
        // 女=[Student{name='pipe', sex='女', money=40.0}, Student{name='pinck', sex='女', money=80.0}],
        // 男=[Student{name='apple', sex='男', money=10.0}, Student{name='banana', sex='男', money=10.0}, Student{name='orange', sex='男', money=20.0}]
        // }

        Map<String, List<Double>> collect2 = students.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.mapping(Student::getMoney, Collectors.toList())));
        System.out.println(collect2);
        //{女=[40.0, 80.0], 男=[10.0, 10.0, 20.0]}

        Map<String, Set<Double>> collect3 = students.stream().collect(Collectors.groupingBy(Student::getSex, Collectors.mapping(Student::getMoney, Collectors.toSet())));
        System.out.println(collect3);
        //{女=[40.0, 80.0], 男=[10.0, 20.0]}
    }

    /**
     * toMap 转成map
     */
    @Test
    public void tesToMap(){
        List<Student> students = Arrays.asList(new Student("apple", "男", 10.0),
                new Student("banana", "男", 10.0),
                new Student("orange", "男", 20.0),
                new Student("pipe", "女", 40.0),
                new Student("pinck", "女", 80.0)
        );


        Map<String, Double> collect = students.stream().collect(Collectors.toMap(Student::getName, Student::getMoney));
        System.out.println(collect);
        //{orange=20.0, banana=10.0, apple=10.0, pinck=80.0, pipe=40.0}
    }

    /**
     * toMap 转成map  key重复
     */
    @Test
    public void tesToMap2(){
        List<Student> students = Arrays.asList(new Student("apple", "男", 10.0),
                new Student("banana", "男", 10.0),
                new Student("orange", "男", 20.0),
                new Student("pipe", "女", 40.0),
                new Student("pinck", "女", 80.0)
        );
        /*
        java.lang.IllegalStateException: Duplicate key apple
        at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
        at java.util.HashMap.merge(HashMap.java:1254)
        at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
         */
//        Map<Double,String> collect2 = students.stream().collect(Collectors.toMap(Student::getMoney, Student::getName));
//        System.out.println(collect2);

        Map<Double,String> collect2 = students.stream().collect(Collectors.toMap(Student::getMoney, Student::getName,(oldValue,newValue)->newValue));
        System.out.println(collect2);
        //{80.0=pinck, 40.0=pipe, 20.0=orange, 10.0=banana}  key重复用新值

    }

    /**
     * toMap 转成map 排序
     */
    @Test
    public void tesToMap3() {
        List<Student> students = Arrays.asList(new Student("apple", "男", 10.0),
                new Student("banana", "男", 10.0),
                new Student("orange", "男", 20.0),
                new Student("pipe", "女", 40.0),
                new Student("pinck", "女", 80.0)
        );

        LinkedHashMap<String, Double> collect = students.stream().sorted(Comparator.comparing(Student::getMoney).reversed())
                .collect(Collectors.toMap(Student::getName, Student::getMoney, (oldValue, newValue) -> newValue, LinkedHashMap::new));
        System.out.println(collect);
        //{pinck=80.0, pipe=40.0, orange=20.0, apple=10.0, banana=10.0}
    }
}

需要注意list转set,set中的值不允许有重复,所以只有一个,,list转map,map的key不能重复,所以自己设置选用老的还是新的,还一点需要注意,list转map时key可以为null,value不可以为null,否则会报空指针异常

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星

stream的groupingby_handlemapping

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171472.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux基本操作命令_vim常用命令

    linux基本操作命令_vim常用命令1.查找文件find/-name*文件名*2.开始、重启、结束进程#开始进程systemctlstartfilebeat#重启systemctlrestartfilebeat#结束systemctlstopfilebeat3.转到目录#从根目录开始搜索文件夹cd/文件名/#从当前目录开始cd文件名/4.编辑文件#编辑vim文件名vi文件名#查看cat文件名5.从编辑状态退出#先按Esc

    2022年9月26日
    1
  • html协议属于哪层,smtp协议在什么层

    SMTP:简单邮件传输协议SMTP:SimpleMailTransferProtocol)SMTP是一种提供可靠且有效电子邮件传输的协议。SMTP是建模在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。SMTP协议简介1.介绍SMTP称为简单Mail传输协议(SimpleMailTransferProtocal),目标是向用户…

    2022年4月16日
    41
  • 2. 无门槛学会数据类型与输入、输出函数,滚雪球学 Python python 入门教程非常详细

    2. 无门槛学会数据类型与输入、输出函数,滚雪球学 Python python 入门教程非常详细python入门教程,python入门教程,python入门教程,python入门教程,python入门教2.无门槛学会数据类型与输入、输出函数,滚雪球学Pythonpython入门

    2022年7月6日
    15
  • anycast隧道_IPv6中Anycast通信模型若干问题的分析和研究.pdf

    anycast隧道_IPv6中Anycast通信模型若干问题的分析和研究.pdf您所在位置:网站首页>海量文档&nbsp>&nbsp计算机&nbsp>&nbsp通信/网络IPv6中Anycast通信模型若干问题的分析和研究.pdf109页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受…

    2022年5月23日
    33
  • bot抢鞋软件推荐_国内bot抢鞋软件

    bot抢鞋软件推荐_国内bot抢鞋软件自动抢鞋软件bot是一款超级易于使用的抢鞋工具软件。您可以在这里关注最新最时尚鞋。时尚潮流爱好者都可以关注它。您可以轻松地发现更多时尚的新鞋。如果您要寻找的鞋子,可以直接在线下订单。在这个时候,软件会自动帮你争取速度了。您可以及时关注有关时尚鞋预售的信息。抢鞋机器人bot特色1、抢鞋机器人bot软件是一款超级好用的掌上抢鞋神器,一键快速抢鞋;2、自己拼不过大家的手速,现在就可以靠机器人为你解决,各…

    2022年4月20日
    104
  • java8 手把手教你学会写lambda表达式

    java8 手把手教你学会写lambda表达式Java8发布已经有一段时间了,这次发布的改动比较大,很多人将这次改动与Java5的升级相提并论。Java8其中一个很重要的新特性就是lambda表达式,允许我们将行为传到函数中。想想看,在Java8之前我们想要将行为传入函数,仅有的选择就是匿名内部类。Java8发布以后,lambda表达式将大量替代匿名内部类的使用,简化代码的同时,更突出了原来匿名内部类中最重要的那部分包含真正逻辑的代码。尤其

    2022年6月11日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号