• 快速使用java8 的Optional减少if else


    该类主要用于处理一些可能为null的变量,而同时避免写if(xx==null){..} else{..} 这类代码

    首先看入口nullable

    /**
         * 可以看到Optional已经自动分配了of()/empty()
         */
        public static <T> Optional<T> ofNullable(T value) {
            return value == null ? empty() : of(value);
        }
    

    接下来则是Optional的常见用法,都是一行代码搞定

    
       TestDemo testDemo = new TestDemo();
            //根据testDemo是否为null,为变量设置不同值(不同的返回值)
            int count3 = Optional.ofNullable(testDemo).map(item -> item.getCount()).orElse(1);
    
            //testDemo不为null,则对这个对象做操作
            Optional.ofNullable(testDemo).ifPresent(item -> {
                item.setCount(4);
            });
    
            //testDemo为null,则抛出异常
            Optional.ofNullable(testDemo).orElseThrow(() -> new Exception());
    
    
    

    java8的Map也有类似能力

    //原来的代码
    Object key = map.get("key");
    if (key == null) {
        key = new Object();
        map.put("key", key);
    }
    
    // 上面的操作可以简化为一行,若key对应的value为空,会将第二个参数的返回值存入并返回
    Object key2 = map.computeIfAbsent("key", k -> new Object());
     
    
    

    以下是通过stream手动实现groupby sum(amount)的效果

      //手动groupby  identificationNum,calRule,orgId
            ArrayList<CollectIncomeAmountResult> collectResults = new ArrayList<>(incomeAmounts.stream().collect(Collectors.toMap(k -> k.getIdentificationNum() + k.getCalRule() + k.getOrgId(), a -> a, (o1, o2) -> {
                o1.setAmount(o1.getAmount().add(o2.getAmount()));
                return o1;
            })).values());
    
  • 相关阅读:
    线程(C++11)
    初始化、赋值
    优质学习资料总结
    移植之乱谈
    采集音频和摄像头视频并实时H264编码及AAC编码
    H264解码器源码(Android 1.6 版)
    移植ffmpeg到VC环境心得
    收集的网络上大型的开源图像处理软件代码(提供下载链接)
    C++开源库,欢迎补充。
    一个轻量级AOP的实现(开源)
  • 原文地址:https://www.cnblogs.com/CodeSpike/p/15006458.html
Copyright © 2020-2023  润新知