java8 Optional使用 stream filter多级过滤

  1. package com.example.core.mydemo.java8;
  2.  
  3. public class MyModel {
  4. private String couponCode;
  5. private Integer orderType;
  6. private String orderNo;
  7. private String frameNo;
  8. private Integer couponStatus = 0; //默认
  9.  
  10. public Integer getCouponStatus() {
  11. return couponStatus;
  12. }
  13.  
  14. public void setCouponStatus(Integer couponStatus) {
  15. this.couponStatus = couponStatus;
  16. }
  17.  
  18. public String getOrderNo() {
  19. return orderNo;
  20. }
  21.  
  22. public void setOrderNo(String orderNo) {
  23. this.orderNo = orderNo;
  24. }
  25.  
  26. public String getFrameNo() {
  27. return frameNo;
  28. }
  29.  
  30. public void setFrameNo(String frameNo) {
  31. this.frameNo = frameNo;
  32. }
  33.  
  34. public String getCouponCode() {
  35. return couponCode;
  36. }
  37.  
  38. public void setCouponCode(String couponCode) {
  39. this.couponCode = couponCode;
  40. }
  41.  
  42. public Integer getOrderType() {
  43. return orderType;
  44. }
  45.  
  46. public void setOrderType(Integer orderType) {
  47. this.orderType = orderType;
  48. }
  49. }
  50.  
  51. package com.example.core.mydemo.java8;
  52.  
  53. import java.util.ArrayList;
  54. import java.util.List;
  55. import java.util.Optional;
  56.  
  57. public class ListTest {
  58. public static void main(String[] args) {
  59.  
  60. List<MyModel> list = new ArrayList();
  61. MyModel model = new MyModel();
  62. model.setCouponCode("111111");
  63. model.setCouponStatus(1);
  64. model.setOrderType(1);
  65. list.add(model);
  66.  
  67. model = new MyModel();
  68. model.setCouponCode("22222");
  69. model.setCouponStatus(0);
  70. model.setOrderType(2);
  71. list.add(model);
  72.  
  73. int orderType = 1;
  74.  
  75. Optional<MyModel> optional = Optional.ofNullable(list).orElseGet(ArrayList::new).stream().filter(x -> x.getOrderType() == orderType).filter(x ->x.getCouponStatus() == 0).findFirst();
  76. MyModel model3 = optional.orElse(null);
  77. if(model3 != null) {
  78. String couponId = model3.getCouponCode();
  79. //关联订单号
  80. System.out.println("couponId="+couponId);
  81. }else{
  82. System.out.println("未找到未使用的记录");
  83. }
  84. }
  85. }

java8 Optional使用 stream filter多级过滤的更多相关文章

  1. Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

    内容简介 本文主要说明在Java8及以上版本中,使用stream().filter()来过滤一个List对象,查找符合条件的对象集合. List对象类(StudentInfo) public clas ...

  2. Java8 新特性 Stream Api 之集合遍历

    前言 随着java版本的不断更新迭代,java开发也可以变得甜甜的,最新版本都到java11了,但是后面版本也是不在提供商用支持,需要收费,但是java8 依然是持续免费更新使用的,后面版本也更新很快 ...

  3. django-admin 仿写stark组件action,filter筛选过滤,search查询

    写在StandLi里面的方法都是通过ModelSubject这个类里面的stand_li方法,在它里面用StandLi这个类实例化出来一个对象,这个实例化出来的对象把数据传给前端HTML模板进行渲染, ...

  4. java8新特性——stream笔记

    stream对象 Stream IntStream LongStream DoubleStream 创建 常用的三种方式: 使用list对象: list.stream() − 为集合创建串行流. li ...

  5. java8中的stream().filter()的使用和Optional()

    转: https://www.cnblogs.com/yimiyan/p/5992440.html Optional: https://www.cnblogs.com/zhangboyu/p/7580 ...

  6. java8:(Lambda 表达式,Supplier,@FunctionalInterface,foreach(),Optional,Stream().collect,双冒号,joining,partitioningBy分区,collectingAndThen,filter())

    1.Lambda 表达式: 引导:http://www.cnblogs.com/yulinfeng/p/8452379.html DEMO1: List<String> names1 = ...

  7. Java8新特性代码示例(附注释)- 方法引用,Optional, Stream

    /** * java8中的函数式接口,java中规定:函数式接口必须只有一个抽象方法,可以有多个非抽象方法,同时,如果继承实现了 * Object中的方法,那么也是合法的 * <p> * ...

  8. java8 stream ,filter 等功能代替for循环

    直接上代码,比较实在. 对象A public Class A{ private Long id; private String userName; ..... ....省略get和set方法 } 在L ...

  9. java8 新特性 Stream流 分组 排序 过滤 多条件去重

    private static List<User> list = new ArrayList<User>(); public static void main(String[] ...

  10. java8新特性——Stream API

    Java8中有两大最为重要得改变,其一时Lambda表达式,另外就是 Stream API了.在前面几篇中简单学习了Lambda表达式得语法,以及函数式接口.本文就来简单学习一下Stream API( ...

随机推荐

  1. 阿里千万实例可观测采集器-iLogtail正式开源

    ​简介:11月23日,阿里正式开源可观测数据采集器iLogtail.作为阿里内部可观测数据采集的基础设施,iLogtail承载了阿里巴巴集团.蚂蚁的日志.监控.Trace.事件等多种可观测数据的采集工 ...

  2. [GPT] gradio-chatbot 原理及代码解析

      GradioChatBot 是一个基于 Gradio 的聊天机器人,它可以与不同的 URL 进行对话.其原理是通过将用户输入的文本发送到指定的 URL,然后接收并解析 URL 返回的响应,然后将响 ...

  3. [Docker] 使 Volume 独立于容器运行时的方式 - 让容器引擎去处理

    在单纯使用 run 命令运行一个容器时,通常会使用 -v 挂载的方式来实现宿主机数据卷映射到容器内. 使用命令: $ docker run --name mysql-con -v /my/custom ...

  4. dotnet 在析构函数调用 ThreadLocal 也许会抛出对方已释放

    我在不自量力做一个数组池,就是为了减少使用 System.Buffers.dll 程序集,然而在数组池里面,所用的 ThreadLocal 类型,在我对象析构函数进行归还数组时,抛出了无法访问已释放对 ...

  5. 如何在 Linux 上部署 RabbitMQ

    如何在 Linux 上部署 RabbitMQ 目录 如何在 Linux 上部署 RabbitMQ 安装 Erlang 从预构建的二进制包安装 从源代码编译 Erlang RabbitMQ 的安装 使用 ...

  6. VSCode 打开ESP32工程问题

    一.无法跳转 问题现象: 打开ESP32工程头文件提示波浪线不跳转,如下图所示: 解决办法: 删除工程中.vsccode文件夹下的所有文件 VSCode 中打开命令行搜索 ESP-IDF 找到`添加 ...

  7. vue项目(cli-3)替换浏览器logo

    思路: 根html文件的 <link rel="icon" href="<%= BASE_URL %>favicon.ico">是引入i ...

  8. 一键自动化博客发布工具,用过的人都说好(segmentfault篇)

    segmentfault是我在这些平台中看过界面最为简洁的博客平台了. 今天就以segmentfault为例,讲讲在blog-auto-publishing-tools中的实现原理. 前提条件 前提条 ...

  9. 特工17Agent17汉化版游戏破解金币方法修改破解金币的增加方法

    又是一个renpy游戏,昨晚搞了半个小时搞定的,其实这个游戏要赚钱也不难,就是点点点就可以了,但是我觉得还是挺费劲的,因为好多道具都很贵,攒钱又不怎么容易,花钱的地方还挺多的,所以干脆不如直接破解了算 ...

  10. vue路由跳转的三种方式

    目录 1.router-link [实现跳转最简单的方法] 2.this.$router.push({ path:'/user'}) 3.this.$router.replace{path:'/' } ...