首页 > 其他分享 >stream流的一些常用用法

stream流的一些常用用法

时间:2023-06-30 16:35:20浏览次数:38  
标签:map 常用 Collectors stream list 用法 Employee public

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Employee {
    private Long id;
    private String name;   // 姓
    private String city;   // 城市
    private Integer sales;  // 销售额
    private boolean status;  // 销售额
}

常用方法  @Slf4j

public class StreamTest {

    static List<Employee> list = Arrays.asList(
            new Employee(1l,"李念", "西安", 800,true),
            new Employee(2l,"李四", "西安", 700,false),
            new Employee(3l,"王五", "西安", 400,false),
            new Employee(4l,"李东", "武汉", 530,true),
            new Employee(5l,"赵乐", "武汉", 350,false),
            new Employee(6l,"王卓", "武汉", 120,false),
            new Employee(7l,"皇子", "成都", 550,true),
            new Employee(1l,"李念", "成都", 300,true),
            new Employee(9l,"梁博", "成都", 450,false));

    //编辑集合并统一给状态赋值
    public static void testForEach() {
        list.stream().forEach(s ->
                s.setStatus(true)
        );
        log.info("ForEach输出:数据:{},大小:{}", list.toArray(), list.size());
    }

    //过滤出销售额大于400的员工
    public static void testFilter() {
        List<Employee> listfilter = list.stream().filter(s->s.getSales() > 400).sorted(Comparator.comparing(Employee::getSales)).collect(Collectors.toList());
        log.info("Filter输出:数据:{},大小:{}", listfilter, listfilter.size());
    }

    //将员工名称转成集合并去掉前两个
    public static List<String> testMap() {
        List<String> listMap = list.stream().map(Employee::getName).skip(2).collect(Collectors.toList());
        log.info("Map输出:数据:{},大小:{}", listMap, listMap.size());
        return listMap;
    }

    //过滤出状态是true 的前7组数据
    public static void testFilterB() {
        List<Employee> listfilterB = list.stream().filter(Employee::isStatus).limit(7).collect(Collectors.toList());
        log.info("FilterB输出:数据:{},大小:{}", listfilterB, listfilterB.size());
    }

    //按城市分组,key为城市名称
    public static void testGroupBy1(){
       Map<String,List<Employee>> map = list.stream().collect(Collectors.groupingBy(Employee::getCity));
        log.info("testGroupBy输出:数据:{},大小:{}", map, map.size());
        log.info("=======================================");
        map.forEach((key,val)->{
            System.out.println("城市:"+key+" ---销售额: "+val);
        });
    }

    //分组计算每个城市总的销售额
    public static void testGroupBy2(){
        Map<String, Integer> map = list.stream().
                collect(Collectors.groupingBy(Employee::getCity, Collectors.summingInt(Employee::getSales)));
        log.info("testGroupBy输出:数据:{},大小:{}", map, map.size());
        map.forEach((key,value)->{
            System.out.println("城市:"+key+" ---销售额: "+ value);
        });
    }

    //分组计算每个城市的最高销售额
    public static void testGroupBy3(){
        Map<String, Employee> map = list.stream().collect(Collectors.groupingBy(Employee::getCity,
                Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingInt(Employee::getSales)), Optional::get)));
        map.forEach((key,val)->{
            System.out.println("城市:"+key+" 销售额最大员工:"+val);
        });
    }

    //去重,选择最后一个
    public static void testMap4(){
        Map<Long, Employee> map = list.stream().collect(Collectors.toMap(Employee::getId,o->o,(k1,k2)->k2));
        map.forEach((key,val)->{
            System.out.println("城市:"+key+" 销售额最大员工:"+val);
        });
    }

//获取最大值、最小值 public static void testReduce() { List<Integer> list1 = Arrays.asList(1,100,200); int sum = list1.stream().reduce(0,Integer::sum); int max = list1.stream().reduce(0,Integer::max); int min = list1.stream().reduce(0,Integer::min); log.info("FilterB sum输出:" + sum ); log.info("FilterB max输出:" + max ); log.info("FilterB min输出:" + min ); }

 

标签:map,常用,Collectors,stream,list,用法,Employee,public
From: https://www.cnblogs.com/person008/p/17517173.html

相关文章

  • Miniconda的常用命令
    安装Miniconda:下载Miniconda安装程序,根据操作系统的不同选择适当的版本。运行安装程序,并按照指示进行安装。可以选择安装路径和添加到系统路径。创建一个新的环境:condacreate--name<环境名称>可以使用-n或--name参数指定环境名称。可以加上python=<版本号>来......
  • python 中pyecharts模块用法
    https://zhuanlan.zhihu.com/p/111330795#:~:text=bar1%3D(Bar().add_xaxis(['1月'%2C'2月'%2C'3月'%2C'4月'%2C'5月'%2C'6月'%2C'7月'%2C'8月'%2C'9月'%2C'10月'%2C'11月......
  • JavaScript中数组常用方法汇总!
    数组是一个复杂数据类型,我们在操作它的时候就不能再想基本数据类型一样操作了。比如我们想改变一个数组//创建一个数组vararr=[1,2,3]//我们想把数组变成只有1和2arr=[1,2]这样肯定是不合理,因为这样不是在改变之前的数组。相当于重新制作了一个数组给到arr......
  • Linux常用命令
    文件传输rz/sz:远程服务器传输/下载文件命令查看应用进程ps-ef|grepjava/tomcat文件解压unziptar命令名:unzip功能说明:解压缩zip文件语法:unzip[-cflptuvz][-agCjLMnoqsVX][-P<密码>][.zip文件][文件][-d<目录>][-x<文件>]或unzip[-Z]补充说明:unzip为.......
  • Markdown 用法总结
    1.插入图片Markdown中插入图片的语法为:方法1:![图片说明](图片路径)方法2:<imgsrc="图片路径"width="300"height="200">1)主要分为网络图片和本地图片其中网络图片可以直接写入网址即可,而插入本地图片可以分为绝对路径和相对路径,由于绝对路径在不同的环境下容易无法......
  • Nginx 常用的基础配置(web前端相关方面)
    基础配置userroot;worker_processes1;events{worker_connections10240;}http{log_format'$remote_addr-$remote_user[$time_local]''"$request"$sta......
  • 常用媒体查询尺寸
      @mediascreenand(max-width:767.98px){  }  @mediascreenand(min-width:768px){  }  @mediascreenand(min-width:992px){    }  @mediascreenand(min-width:1200px){   }  @mediascreenand......
  • 01-typedef用法详解
    目录一.typedef作用于函数指针一.typedef作用于函数指针可以使得函数指针变量称为一种类型,可以作为数据类型定义该类型函数指针变量#include<stdio.h>voidtestCallback(inta,intb){ printf("%d",a+b);}intmain(){ typedefvoid(*FuncPoint)(int,int);......
  • json.NewEncoder的用法
    写get或post的api接口时需要注意什么?在编写GET或POST的API接口时,有一些注意事项需要考虑,以确保接口的正确性和安全性:路由和路径参数:在设计API接口时,需要选择合适的路由和路径参数来表示资源的唯一标识符或其他参数。确保路径参数的命名清晰明确,遵循RESTful设计原则。请求方......
  • C#中的using用法总结
      using一般有两个作用:  1、作为语句,用于定义一个范围,在此范围的末尾将释放对象(IDisposable和IAsyncDisposable接口)  2、作为指令,用于引入命名空间或者类型,或者为引入的命名空间或者类型定义别名  using语句  using语句应该都很熟悉了吧,从最早的ADO.net,或者对文件、......