首页 > 编程语言 >java8 stream 常用操作

java8 stream 常用操作

时间:2023-02-22 15:12:13浏览次数:50  
标签:map 常用 stream Collectors userList collect 分组 java8

遍历

// list 遍历,stream() 可省略
list.stream().forEach(e -> {
});

// map 遍历
map.forEach((k,v) -> {
});

过滤

// 保留 age > 18 的
userList.stream().filter(e -> e.getAge() > 18);

// 移除 age <= 18 的
userList.removeIf( e -> e.getAge() <= 18);

映射

// 只要用户名
userList.stream().map( e -> e.getName());

// 转型
userList.stream().map( e -> {
  Member member = new Member();
  BeanUtils.copyProperties(e, member);
  retuen member;
})

最值

// 数值列表(两种写法都是取最大值)
intList.stream().max(Integer::compare).get();
intList.stream().mapToInt(Integer::intValue).min().getAsInt();

// 对象列表(最大和最小年龄)
userList.stream().max(Comparator.companing(User::getAge)).get();
userList.stream().min(Comparator.companing(User::getAge)).get();

排序

// 用户列表根据年龄倒叙,相同年龄的根据分数顺序,mysql 的 order by age desc, score
userList.stream()
            .sorted(Comparator
                      .comparing(User::getAge, Comparator.reverseOrder())
                      .thenComparing(User::getScore)
            )
            .collect(Collectors.toList());

分组

// 用性别分组
Map<String, List<Person>> sexGroup = personList.stream().collect(Collectors.groupingBy(e -> e.getSex()));

// 先用性别分组,再用区域分组
Map<String, Map<String, List<Person>>> areaGroup = personList.stream().collect(Collectors.groupingBy(Person::getSex, Collectors.groupingBy(Person::getArea)));

// 根据 店铺ID和商品ID 分组商品
Map<String, List<Item>> sexGroup = itemList.stream().collect(Collectors.groupingBy(e -> e.getShopId() + "-" + e.getItemId()));

list 转 map

效果和 分组 类似,只不过分组后 value 可能是多个,这种转型之后 value 只是一个,如果 value 是多个会报错

// 用户列表转成 map(k:用户Id,v:用户)
Map<String, User> collect = userList.stream().collect(Collectors.toMap(e -> e.getId(), e -> e, (e1, e2) -> e1));

// 订单商品列表转成 map(k:商品Id,v:商品数量(如果商品id重复,数量就相加))
Map<String, Integer> collect = itemList.stream().collect(Collectors.toMap(e -> e.getItemId(), e -> e.getSize(), (e1, e2) -> e1+e2));

标签:map,常用,stream,Collectors,userList,collect,分组,java8
From: https://www.cnblogs.com/hangyssss/p/17144227.html

相关文章

  • BAPI调用 - SAP 库存管理常用BAPI
    BAPI调用-SAP库存管理常用BAPIIAmZenos关注IP属地:重庆0.1662019.09.3011:00:07字数405阅读1,999库存管理BAPI库存:1.BAPI_MATERIAL_AVAILABILITY 获得......
  • vim常用命令之多行注释和多行删除
    vim中多行注释和多行删除命令,这些命令也是经常用到的一些小技巧,可以大大提高工作效率。 1.多行注释: 1.首先按esc进入命令行模式下,按下Ctrl+v,进入列(也叫区块)模式;......
  • Python爬虫常用:谷歌浏览器驱动——Chromedriver 插件安装教程
    我们在做爬虫的时候经常要使用谷歌浏览器驱动,今天分享下这个Chromedriver插件的安装方法。第一步、打开谷歌浏览器打开设置面板第二步、查看当前谷歌浏览器版本号第三步、......
  • 数组常用方法
    常用的数组方法1.arr.push()向数组最后增加元素,改变的是原数组2.arr.unshift()向数组最前面增加元素,改变原数组3.arr.pop()删除数组最后一个元素,改变原数组4.arr.shift......
  • 常用的Dos命令
    常用的Dos命令#盘符切换盘符+:(英文冒号)如D:#查看当前目录下的所以文件dir#切换目录cd#返回上一级cd..cd/dY:cd/dY:\typoracdtypora#清理屏幕......
  • vim常用操作
    命令作用x删除光标所在行nx删除光标所在处后的n个字符dG删除光标所在处到末尾的所有行D删除光标所在处到行尾的内容:5,7d删除指定范围的行:g......
  • 微机原理与系统设计笔记7 |常用芯片接口技术、中断系统与可编程中断控制器8259A
    打算整理汇编语言与接口微机这方面的学习记录。本部分介绍常用芯片接口技术、中断系统与可编程中断控制器8259A。参考资料西电《微机原理与系统设计》周佳社西交......
  • postgresql 常用的删除重复数据方法
    一、最高效方法测试环境验证,6600万行大表,删除2200万重复数据仅需3分钟deletefromdeltestawherea.ctid=any(array(selectctidfrom(selectrow_number()over......
  • ADB常用命令
    常用命令:adbdevices#查看设备adbshelladbconnectip:port#远程连接adbshellpmlistpackages#查看所有包名adbshellpmlistpackages–s#查看所有系统......
  • Stream 流
    简介Stream流是Java8新提供给开发者的一组操作集合的API,将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选、排序、聚合等。......