首页 > 编程语言 >Java 8 Stream基础操作汇总

Java 8 Stream基础操作汇总

时间:2022-11-18 16:01:56浏览次数:45  
标签:Java Stream Collectors userList 汇总 collect User getSex BigDecimal

Java 8 Stream操作汇总

目录

前提条件:

// User实体类    
@Data
public class User {


    /**
     * 姓名
     */
    private String name;


    /**
     * 年龄
     */
    private Integer age;


    /**
     * 性别 1-男 2-女
     */
    private Integer sex;
    
    
    /**
     * 身高
     */
    private Long height;

    /**
     * 体重
     */
    private Double weight;


    /**
     * 体重
     */
    private BigDecimal money;


}
// 获取用户列表
 public static List<User> getUserList() {

        User user1 = new User("小王", 18, 1,180L,60D, BigDecimal.valueOf(2000L));
        User user2 = new User("小红", 17, 2,170L,55D, BigDecimal.valueOf(1000L));
        User user3 = new User("小张", 19, 1,160L,50D, BigDecimal.valueOf(3000L));
        User user4 = new User("小蓝", 16, 2,150L,51D, BigDecimal.valueOf(4000L));
        return new ArrayList<>(Arrays.asList(user1, user2, user3, user4));
 }

1.分组

要求:按性别分组

List<User> userList = getUserList();
Map<Integer, List<User>> collect = userList.stream()
    .filter(e -> e.getSex() != null)
    .collect(Collectors.groupingBy(User::getSex));
     .collect(Collectors.groupingBy(User::getSex, Collectors.counting()));
/**
Result:	key=1 value=[user1,user3]
		key=2 value=[user2,user4]
**/

注意:分组字段(sex)不能为null,如果存在null会出现:element cannot be mapped to a null key错误

2.分组统计

要求:统计不同性别人员个数

 Map<Integer, Long> collect1 = userList.stream()
     .filter(e -> e.getSex() != null)
     .collect(Collectors.groupingBy(User::getSex, Collectors.counting()));
/**
Result:	key=1 value=2
		key=2 value=2
**/

3.分组求和

要求:统计不同性别人员年龄之和

Map<Integer, Integer> collect = userList.stream()
    .filter(e -> e.getSex() != null)
    .collect(Collectors.groupingBy(User::getSex, Collectors.summingInt(User::getAge)));
/**
Result:	key=1 value=37
		key=2 value=33
**/

注意:

  1. 分组求和时,所调用的方法与求和字段有关,如 年龄字段类型为Integer,对应Collectors.summingInt(User::getAge)
Integer 类型	==> Collectors.summingInt(User::getAge)
Double 类型	==>	Collectors.summingDouble(User::getWeight)
Long 类型		==> Collectors.summingLong(User::getHeight)
Bigdecimal 类型	==> Collectors.reducing(BigDecimal.ZERO, User::getMoney, BigDecimal::add)
eg.	userList.stream()
    .filter(e -> e.getSex() != null)
    .collect(Collectors.groupingBy(User::getMoney, Collectors.reducing(BigDecimal.ZERO, User::getMoney, BigDecimal::add)));

4.最大最小值

要求:查询年龄最大最小的用户

// 最大
User user = userList.stream().max(Comparator.comparingInt(User::getAge)).get();
// 最小
User user = userList.stream().min(Comparator.comparingInt(User::getAge)).get();

5.排序

要求:按年龄排序

// sort默认为升序(从小到大)
List<User> collect = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());

// 降序排序
List<User> collect = userList.stream()
    .sorted(Comparator.comparing(User::getAge,Collections.reverseOrder()))
    .collect(Collectors.toList());

标签:Java,Stream,Collectors,userList,汇总,collect,User,getSex,BigDecimal
From: https://www.cnblogs.com/XiaoMingStudy1/p/16903523.html

相关文章

  • 自定义IE表达式使用.tld文件减少jsp文件中的java代码时出现的错误(可运行)cvc-id.3
    tld类型的文件产生错误如下:但是不影响运行。只需要如下:将j--->J就行。原因知晓,若有大佬知晓,欢迎留言。本人看到后,必将改正 ......
  • Java进阶篇——设计模式
    设计模式一、代理模式使用代理类对真实对象进行代理,包括真实对象方法的调用、功能的扩展等。访问的时候也只能访问到代理对象,既保护了真实对象同时可以在原始对象上进行......
  • JavaWeb-06-Servlet
    6.Servlet6.1Servlet简介Servlet就是sun公司开发动态web的一门技术Sun公司在这些API中提供了一个接口叫作:Servlet,如果要开发一个Servlet程序,只需要完成两个步骤:编......
  • Java四种引用类型
    强引用默认的引用,任何对象被赋值即为强引用;强引用不会被GC回收。publicclassStrongReferenceUsage{@TestpublicvoidstringReference(){O......
  • Java阻塞队列
    ArrayBlockingQueue长度:固定(有界队列);锁类型:存取共用一个ReentrantLock锁,存取互斥;游标:两个index表示头和尾;阻塞条件:两个Condition标识空或者满,每次的存取操作都会唤醒对......
  • Java-14流Stream【创建一个简易for循环工具】
    Java-14流Stream构造简易的循环取代forIntStream类提供了一个range()方法,可以生成一个流————由int值组成的序列importstaticjava.util.stream.IntStream.*;/**......
  • 令人头疼的Javascript隐式&强制转换
    Javascript的隐式强制只是指Javascript试图将意外的值类型强制为预期的类型。因此,您可以在需要数字的地方传递一个字符串,在需要字符串的地方传递一个对象等,它会尝试将其......
  • Springboot项目java -jar 启动jar包参数详解
    Windows1、指定端口java-jarspringboot.jar--server.port=81812、指定配置文件java-jarspringboot.jar--spring.profiles.active=dev3、同时指定端口与配置文件ja......
  • Ids | Openiddict 客户端获取token后依然无法访问服务端接口问题记录(汇总)
    使用IDentityService4或Openiddict时,客户端在认证通过后,有时候依然无法访问服务端。常见的异常有:1、认证服务器配置的认证URL与客户端调用的URL不匹配2、Scope未被正确添......
  • Java反射与安全问题
    1.Java反射机制Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及......