山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(十四)- 函数式编程(3)

目录

Optional

创建对象

安全消费值

安全获取值

ofElseGet

ofElseThrow

过滤

判断

数据转换

函数式接口

只有一个抽象方法的接口称为函数接口

常用默认方法

基本数据类型优化


Optional

可以避免空指针异常<br/>

创建对象
复制代码
  
      public static void main(String[] args) {
          Author author = getAuthors().get(0);
          Optional<Author> authorOptional = Optional.ofNullable(author);
      }

<br/>

安全消费值
复制代码
  
      public static void main(String[] args) {
          Author author = getAuthors().get(0);
          Optional<Author> authorOptional = Optional.ofNullable(author);
          authorOptional.ifPresent(author1 -> System.out.println(author1.getName()));
      }

<br/>

安全获取值

不推荐使用get()

ofElseGet

获取数据并且设置为空时的默认值,为null就返回默认值

复制代码
  
      public static void main(String[] args) {
          Author author = getAuthors().get(0);
          Optional<Author> authorOptional = Optional.ofNullable(author);
          Author author1 = authorOptional.orElseGet(() -> new Author());
          System.out.println(author1.getName());
      }

<br/>

ofElseThrow

为空就根据传入的参数进行异常抛出

复制代码
  
      public static void main(String[] args) {
          Author author = getAuthors().get(0);
          Optional<Author> authorOptional = Optional.ofNullable(author);
          try {
              Author author1 = authorOptional.orElseThrow((Supplier<Throwable>) () -> {
                  throw new RuntimeException("为空");
              });
          } catch (Throwable e) {
              throw new RuntimeException(e);
          }
      }

<br/>

过滤

不符合过滤条件返回的是新的Optional对象,其值为null

复制代码
  
      public static void main(String[] args) {
          Author author = getAuthors().get(0);
          Optional<Author> author1 = Optional.ofNullable(author);
          author1.filter(author2 -> author2.getAge() > 18)
                  .ifPresent(author22 -> System.out.println(author22.getAge()));
      }

<br/>

判断

进行是否存在数据的判断,如果为空返回false,为true就不为空

复制代码
  
      public static void main(String[] args) {
          Author author = getAuthors().get(0);
          Optional<Author> authorOptional = Optional.ofNullable(author);
          if (authorOptional.isPresent()) {
              System.out.println(authorOptional.get());
          }
      }

<br/>

数据转换
复制代码
  
      public static void main(String[] args) {
          Author author = getAuthors().get(0);
          Optional<Author> authorOptional = Optional.ofNullable(author);
          authorOptional.map(au ->au.getBookList())
                  .ifPresent(books -> System.out.println(books));
      }

<br/><br/>

函数式接口

只有一个抽象方法的接口称为函数接口

常用默认方法

and 相当于 &&找出年龄大于17并且长度大于1的作家

复制代码
  
      public static void main(String[] args) {
          List<Author> authors = getAuthors();
          authors.stream()
                  .filter(new Predicate<Author>() {
                      @Override
                      public boolean test(Author author) {
                          return author.getAge() > 17
                      }
                  }.and(new Predicate<Author>() {
                      @Override
                      public boolean test(Author author) {
                          return author.getName() .length() > 1
                      }
                  })).forEach(author -> System.out.println(author.getAge()));
      }

or 相当于||打印年龄小于17的

复制代码
  
      public static void main(String[] args) {
          List<Author> authors = getAuthors();
          authors.stream()
                  .filter(new Predicate<Author>() {
                      @Override
                      public boolean test(Author author) {
                          return author.getAge() > 17;
                      }
                  }.or(new Predicate<Author>() {
                      @Override
                      public boolean test(Author author) {
                          return author.getName() .length() > 1;
                      }
                  })).forEach(author -> System.out.println(author.getAge()));
      }

negate 相当于 !

复制代码
  
      public static void main(String[] args) {
          List<Author> authors = getAuthors();
          authors.stream()
                  .filter(new Predicate<Author>() {
                      @Override
                      public boolean test(Author author) {
                          return author.getAge() > 17;
                      }
                  }.negate())
                  .forEach(author -> System.out.println(author.getAge()));
      }

基本数据类型优化

数据量较大时,节约自动拆箱装箱的时间优化前

复制代码
  
      public static void main(String[] args) {
          List<Author> authors = getAuthors();
          authors.stream()
                  .map(author -> author.getAge())
      }

优化后

复制代码
  
      public static void main(String[] args) {
          List<Author> authors = getAuthors();
          authors.stream()
                  .mapToInt(author -> author.getAge())
      }
相关推荐
MATLAB代码顾问32 分钟前
5大智能算法优化标准测试函数对比(Python实现)
开发语言·python
wuminyu2 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
万粉变现经纪人2 小时前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
清风明月一壶酒2 小时前
OpenClaw自动处理Word文档全流程
开发语言·c#·word
其实防守也摸鱼2 小时前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
callJJ3 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
小郑加油3 小时前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦3 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
KuaCpp4 小时前
C++面向对象(速过复习版)
开发语言·c++
wbs_scy4 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言