public static Optional 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());
				
我们知道 Java 8 增加了一些很有用的 API, 其中一个是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代码开始这么写了   Optional user = ……   if (user.isPresent()) {   return user.getOrders();   } else {   return Collections.emptyList();   那么不得不说我们的思维仍然是在原地踏步, 只是本能的认为它不过是 User 实例的包装, 这与我们之前写成 private static final Optional<?> EMPTY = new Optional<>(); //空对象创建的唯一指定构造器 private Optional() { thi...
JDK8新特性----玩转Optional工具类 1. 基本概念 ​ Java 8 中引入了一个有趣的特性是Optional类,该工具类的引入主要是为了解决空指针异常(NullPointException)。本质上,这是一个包含有可选值的包装类,意味着类本身亦可以有值也可以为Null。
程序猿开日常开发中,为了避免NullPointerException异常,会写很多if else的判断。如果if else太多会让代码显的很乱,那如何减少if else的使用呢? 减少if else的方式之一,利用JDK8提供的Optional。 代码示例: 示例中getStartTime()获取String类型的时间字符串并返回。执行逻辑: 调动selectStartTime()查询DB返回LocalDateTime值; 响应值dateTime如果为null,就给一个默认值; 响应值dateTime
对接物联网设备,设备传递命令,然后根据命令操作不同的行为,最后返回。 现在问题是if else 太多了,代码太长,项目不好维护和扩展,代码如下: public static String execute(String command, String jsonStr){ if ("openDoor".equals(command)) { // 具体业务代码会比较多,这里只是做一个简单的代码框架例子。 return "开门"; } else if ("clo