首页 > 编程语言 >Java关于stream处理数据的一些操作

Java关于stream处理数据的一些操作

时间:2023-11-01 11:15:05浏览次数:32  
标签:Java stream list System new println 操作 out

class UserPo {     private String name;     private Double score; }   List<UserPo> list = new ArrayList<>();         list.add(new UserPo("小一", 10.d));         list.add(new UserPo("小五", 50.d));         list.add(new UserPo("小六", 60.d));         list.add(new UserPo("小6", 60.d));         list.add(new UserPo("小空", null));         list.add(new UserPo("小九", 90.d));  
        long count = 0;         List<UserPo> filterList = null;
        // filter 过滤器的使用         // 筛选出成绩不为空的学生人数         count = list.stream().filter(p -> null != p.getScore()).count();         System.out.println("参加考试的学生人数:" + count);
        // collect         // 筛选出成绩不为空的学生集合         filterList = list.stream().filter(p -> null != p.getScore()).collect(Collectors.toList());         System.out.println("参加考试的学生信息:");         filterList.stream().forEach(System.out::println);
        // map 将集合映射为另外一个集合         // 取出所有学生的成绩         List<Double> scoreList = list.stream().map(p -> p.getScore()).collect(Collectors.toList());         System.out.println("所有学生的成绩集合:" + scoreList);
        // map         System.out.println("按学生成绩归集:");         Map<Double, List<UserPo>> groupByScoreMap = list.stream().filter(p -> null != p.getScore()).collect(Collectors.groupingBy(UserPo::getScore));         for (Map.Entry<Double, List<UserPo>> entry : groupByScoreMap.entrySet()) {             System.out.println("成绩:" + entry.getKey() + " 人数:" + entry.getValue().size());         }

        // 将学生姓名集合串成字符串,用逗号分隔         String nameString = list.stream().map(p -> p.getName()).collect(Collectors.joining(","));         System.out.println("所有学生的姓名字符串:" + nameString);
        // sorted排序         // 按学生成绩逆序排序 正序则不需要加.reversed()         filterList = list.stream().filter(p -> null != p.getScore()).sorted(Comparator.comparing(UserPo::getScore).reversed()).collect(Collectors.toList());         System.out.println("所有学生的成绩集合,逆序排序:");         filterList.stream().forEach(System.out::println);
        // forEach         filterList.stream().forEach(p -> p.setScore(p.getScore() + 10));         System.out.println("及格人数太少,给每个人加10分");         filterList.stream().forEach(System.out::println);
        // count         count = filterList.stream().filter(p -> p.getScore() >= 60).count();         System.out.println("最后及格人数" + count);
        DoubleSummaryStatistics statistics = filterList.stream().mapToDouble(p -> p.getScore()).summaryStatistics();         System.out.println("列表中最大的数 : " + statistics.getMax());         System.out.println("列表中最小的数 : " + statistics.getMin());         System.out.println("所有数之和 : " + statistics.getSum());         System.out.println("平均数 : " + statistics.getAverage());
        // 并行流 使用         count = list.parallelStream().filter(p -> null != p.getScore()).count();         System.out.println("并行流处理参加考试的学生人数:" + count);           // BigDecimal 求和         // BigDecimal baseQtySum = stkInventories.stream().map(StkInventory::getBaseQty).reduce(BigDecimal.ZERO, BigDecimal::add);   List<Person> personList = new ArrayList<Person>();         personList.add(new Person("Tom", 10, 23, "male", "New York", null));         personList.add(new Person("Tom", 11, 23, "male", "Washington1", null));         personList.add(new Person("Tom", 11, 21, "female", "Washington", null));         personList.add(new Person("Anni", 110, 24, "female", "New York", null));         personList.add(new Person("Alisa", 111, 26, "male", "New York", null));         personList.add(new Person("Alisa", 111, 25, "female", "New York", null));           //根据一个属性合并         // List<Person> result = new ArrayList<>(personList.stream()         //         .collect(Collectors.toMap(Person::getName, a -> a, (o1, o2) -> {         //             o1.setSalary(o1.getSalary() + o2.getSalary());         //             return o1;         //         })).values());         // result.forEach(System.out::println);     //根据两个属性合并         // List<Person> list = new ArrayList<>();         // personList.parallelStream().collect(Collectors.groupingBy(o->(o.getName() + o.getAge() + o.getArea()),Collectors.toList()))         //         .forEach((id,transfer) -> transfer.stream().reduce((a, b) ->         //                         new Person(a.getName(), a.getAge(),a.getSalary() + b.getSalary(), a.getSex(), a.getArea(), null))         //                 .ifPresent(list::add));         //         // list.forEach(System.out::println);           // 设置第三属性分组再合并         personList.forEach(a -> a.setNameAge(a.getName() + a.getAge()));         List<Person> result1 = new ArrayList<>(personList.stream()                 .collect(Collectors.toMap(Person::getNameAge, a -> a, (o1, o2) -> {                     o1.setSalary(o1.getSalary() + o2.getSalary());                     return o1;                 })).values());         result1.forEach(System.out::println);    

标签:Java,stream,list,System,new,println,操作,out
From: https://www.cnblogs.com/ygc001/p/17802552.html

相关文章

  • java for循环内部使用线程
    /***1、业务场景* 1、定时执行时,可能出现数据量大,执行不完,线程直接被终止掉,丢数据。*/importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;/***1、首先创建线程池,针对线程池开......
  • 查看linux操作系统版本:Ubuntu?Centos?还是其他?
    查看内核版本和操作系统版本:uname-a查看系统架构:uname-m查看系统主机名:hostname查看当前登录用户:whoami查看系统已安装的软件包列表:dpkg-l查看系统内存使用情况:free-h查看系统磁盘使用情况:df-h查看系统CPU使用情况:top查看系统网络连接状态:ifconfig查看系统已安装的软件包数量:a......
  • 如何用Java实现一个线程安全的HashMap?
    有以下几种方式可以实现线程安全的HashMap:使用ConcurrentHashMap类实现:ConcurrentHashMap是Java集合框架中的一个类,它是线程安全的HashMap实现。ConcurrentHashMap的实现方式是将一个大的Map拆分成多个小的Map片段,每个Map片段上都有自己的锁,这样多个线程在访问不同的Map片段时就可......
  • 如何使用Git实现切换分支开发 操作步骤
     现在gitee上新增了一个develop-v1.0.0分支,新增的需求基于分支develop-v1.0.0开发,需要把master分支切换到该分支,代码提交到该分支。步骤一: 步骤二:查看分支输入:gitbranch--remote  步骤三、执行切换分支的命令gitcheckout-b  develop-v1.0.0origin/develop......
  • 二、2、java基础之运算符与键盘录入(scanner)
    一、运算符分类:算术运算符:+,-,*,/,++,--赋值运算符:=,+=,-=,*=,/=,%=关系运算符:==,>,<,>=,<=,!=逻辑运算符:&,|,^,~,||,&&位运算符:&,|,^,~,<<,>>,>>>三目运算符:(关系表达式)?表达式1:表达式2;packagecom.shujia.day02;/*三目运算符......
  • java 开发中VO、PO、DO、DTO、BO、QO、DAO、POJO各种傻傻分不清
    VO(ValueObject):值对象,主要用于业务层之间的数据传递,是方法返回类型。例如,一个方法需要返回用户的信息,可以创建一个UserVO,包含用户的姓名、年龄等信息。PO(PersistentObject):持久化对象,用于表示数据库中的一条记录,与数据库表一一对应。例如,数据库中有一个用户表,可以创建一个Use......
  • Java SDK的二次开发
    要进行JavaSDK的二次开发,您可以按照以下步骤进行操作:下载SDK:首先,您需要从相关服务或平台的官方网站下载适用于Java的SDK。通常,这些SDK都会以压缩文件(如.zip或.tar.gz)的形式提供。解压SDK:将SDK压缩文件解压到您的工作目录中,并确保您具有读写该目录的权限。导入SDK:在您的Java项目中,......
  • JavaScript能否实现在线Excel附件的上传与下载?
    前言在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,例如在Excel中附带一些Word,CAD图等等。同样的,类比到Web端,现在很多人用的在线Excel是否也可以像本地一样实现附件文件的操作呢?答案是肯定的,不过和本地不同的是,Web端不会直接打开附件,而是使用超链接单元格的形式来......
  • 二、1、java基础之关键字、标识符、注释、常量、变量及数据类型
    1、关键字关键字是被java语言赋予特殊含义的单词,其中goto和const作为保留字存在,字母都是小写2、标识符用于起名字的规则,对变量,类,接口等起名字的字符序列规则:可以使用大小写字母,可以存在数字。可以使用$和_注意事项:不能以数字开头,不能与关键字重名,区分大小写,见名知意常见的命......
  • javaweb--MyBatis
    持久层框架,用于简化JDBC开发负责将数据保存到数据库的那一层代码JavaEE三层架构:表现层、业务层、持久层免除了几乎所有JDBC代码及设置参数和获取结果集的工作。1、导入查询user表中所有的数据createDATABASEmybatis;usemybatis;droptableifexiststb_user;createtable......