• 2、JAVA8 之 Optional 线上应用


    背景

      接着《1、Optional 应用》的基础,我们直接来看下线上的实际应用。

    线上示例

    1、案例一:循环内部判空

     原始代码

    List<ConstantScoreQueryBuilder> validBuilderList = Lists.newArrayList();
    
    for (ConstantScoreQueryBuilder queryBuilder : nameMtBuilder) {
      if (queryBuilder != null) {
        validBuilderList.add(queryBuilder);
      }
    }
    
    for (ConstantScoreQueryBuilder queryBuilder : tagBuilderList) {
      if (queryBuilder != null) {
        validBuilderList.add(queryBuilder);
      }
    }
    
    if (categoryBuilder != null) {
      validBuilderList.add(categoryBuilder);
    }
    if (nerEntityBuilder != null) {
      validBuilderList.add(nerEntityBuilder);
    }

     Optional改造代码

    List<ConstantScoreQueryBuilder> validBuilderList = Lists.newArrayList();
    
    nameMtBuilder.forEach(nameBuilder -> Optional.ofNullable(nameBuilder).ifPresent(validBuilderList::add));
    tagBuilderList.forEach(tagBuilder -> Optional.ofNullable(tagBuilder).ifPresent(validBuilderList::add));
    Optional.ofNullable(categoryBuilder).ifPresent(validBuilderList::add);
    Optional.ofNullable(nerEntityBuilder).ifPresent(validBuilderList::add);

    2、案例二:循环外判空

     原始代码

    String query = recallInfoCarrier.getQuery();
    String originQuery = recallInfoCarrier.getOriginQuery();
    List<String> correctQueryList = recallInfoCarrier.getCorrectQueryList();
    List<String> querySynonymsList = recallInfoCarrier.getQuerySynonyms();
    List<String> rewriteQueryList = recallInfoCarrier.getQueryRewrites();
    Map<String, Double> reorderSearchWords = Maps.newLinkedHashMap();
    reorderSearchWords.put(query, 10.0);
    reorderSearchWords.put(originQuery, 10.0);
    
    if (CollectionUtils.isNotEmpty(correctQueryList)) {
      for (String correctQuery : correctQueryList) {
        reorderSearchWords.put(correctQuery, 9.0);
      }
    }
    if (CollectionUtils.isNotEmpty(querySynonymsList)) {
      for (String synonyms : querySynonymsList) {
        reorderSearchWords.put(synonyms, 8.0);
      }
    }
    if (CollectionUtils.isNotEmpty(rewriteQueryList)) {
      for (String rewrite : rewriteQueryList) {
        reorderSearchWords.put(rewrite, 7.0);
      }
    }
    for (Map.Entry<String, Double> entry : searchWords.entrySet()) {
      if (reorderSearchWords.get(entry.getKey()) != null) {
        continue;
      }
      reorderSearchWords.put(entry.getKey(), 6.0);
    }
    recallInfoCarrier.setSearchWords(reorderSearchWords);

     Optional改造代码

    Map<String, Double> reorderSearchWords = Maps.newLinkedHashMap();
    reorderSearchWords.put(recallInfoCarrier.getQuery(), 10.0);
    reorderSearchWords.put(recallInfoCarrier.getOriginQuery(), 10.0);
    
    Optional.ofNullable(recallInfoCarrier.getCorrectQueryList()).orElse(Lists.newArrayList()).forEach(correctQuery -> reorderSearchWords.put(correctQuery, 9.0));
    Optional.ofNullable(recallInfoCarrier.getQuerySynonyms()).orElse(Lists.newArrayList()).forEach(synonymsQuery -> reorderSearchWords.put(synonymsQuery, 8.0));
    Optional.ofNullable(recallInfoCarrier.getQueryRewrites()).orElse(Lists.newArrayList()).forEach(rewriteQuery -> reorderSearchWords.put(rewriteQuery, 7.0));
    
    searchWords.forEach((kQuery, score) -> reorderSearchWords.putIfAbsent(kQuery, 6.0));
    
    recallInfoCarrier.setSearchWords(reorderSearchWords);

    3、案例三:三目运算赋值 

    import java.util.Optional;
     
    public class Java8Tester {
       public static void main(String args[]){
          Java8Tester java8Tester = new Java8Tester();
          Integer value1 = null;
          Integer value2 = new Integer(10);
            
          // Optional.ofNullable - 允许传递为 null 参数
          Optional<Integer> a = Optional.ofNullable(value1);
            
          // Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException
          Optional<Integer> b = Optional.of(value2);
          System.out.println(java8Tester.sum(a,b));
       }
        
       public Integer sum(Optional<Integer> a, Optional<Integer> b){
          // Optional.isPresent - 判断值是否存在
          System.out.println("第一个参数值存在: " + a.isPresent());
          System.out.println("第二个参数值存在: " + b.isPresent());
            
          // Optional.orElse - 如果值存在,返回它,否则返回默认值0
          Integer value1 = a.orElse(new Integer(0));
            
          //Optional.get - 获取值,值需要存在
          Integer value2 = b.get();
          return value1 + value2;
       }
    }
  • 相关阅读:
    6.一个python-selenium的实战
    9.python-ini文件使用(读和写)
    4.表数据的操作-insert、delete
    5.数据库的查询-select
    2.自动化测试之python+selenium基础
    6.python中目录的操作
    sql如何先排序再去重
    hbase(0.94) get、scan源码分析
    Antlr 在 idea 中正确使用的方式
    某日看代码对代码可读性的思考
  • 原文地址:https://www.cnblogs.com/liang1101/p/14674832.html
Copyright © 2020-2023  润新知