快速使用java8 的Optional减少if else

x33g5p2x  于2022-07-04 转载在 Java  
字(1.1k)|赞(0)|评价(0)|浏览(562)

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

首先看入口nullable

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

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

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

java8的Map也有类似能力

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

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

  1. //手动groupby identificationNum,calRule,orgId
  2. ArrayList<CollectIncomeAmountResult> collectResults = new ArrayList<>(incomeAmounts.stream().collect(Collectors.toMap(k -> k.getIdentificationNum() + k.getCalRule() + k.getOrgId(), a -> a, (o1, o2) -> {
  3. o1.setAmount(o1.getAmount().add(o2.getAmount()));
  4. return o1;
  5. })).values());

相关文章

最新文章

更多