一、函数式接口
1、Function函数式接口:有一个输入参数,有一个输出

2、断定型接口:有一个输入参数,返回值只能是布尔值!

3、Consumer 消费型接口:只有输入,没有返回值

4、Supplier供给型接口:没有参数,只有返回值

二、常用的Lambda写法
1、如果model不为空,获取他的data属性,否则返回null
            
            
              java
              
              
            
          
          Optional.ofNullable(model).map(Record::getData).orElse(null);2、遍历list,获取每一个对象的name属性,转化为list返回
            
            
              java
              
              
            
          
          .stream().map(Type::name).collect(Collectors.toList());3、2的并行处理
            
            
              java
              
              
            
          
          .parallelStream().filter(Objects::nonNull).map(Model::getName()).collect(Collectors.toList());4、guava创建集合
            
            
              java
              
              
            
          
          Lists.newArrayList()
Maps.newHashMap();5、遍历apps,获取每个元素的hex属性,mapToLong转化为LongStream,最后求和,intValue向下转型为int
            
            
              java
              
              
            
          
          Long.valueOf(apps.stream().mapToLong(Type::getHex).sum()).intValue();6、list不为空,转化为userId list,并且去重
            
            
              java
              
              
            
          
          Optional.ofNullable(repayProps).orElse(Lists.newArrayList()).stream().map(FlowProps::getUserId).distinct().collect(Collectors.toList());7、list中获取第一个元素findFirst
            
            
              java
              
              
            
          
          .stream().filter(s -> s.getType() == fileType).findFirst().orElse(null);8、把各个元素相加得出一个结果
            
            
              java
              
              
            
          
          .stream().reduce(BigDecimalHelper::addWithNullAsZeroAndScale).orElse(BigDecimal.ZERO)
.stream().reduce(BigDecimal.ZERO, BigDecimal::add);9、求最小值
            
            
              java
              
              
            
          
          .stream().min(Comparator.comparing(Record::getIndex));10、分组
            
            
              java
              
              
            
          
          .stream().collect(Collectors.groupingBy(vo -> vo.getType().name() + vo.getDate()));11、是否有任意一个符合
            
            
              java
              
              
            
          
          Collection<String> prefixList
String userChannel
prefixList.stream().anyMatch(userChannel::startsWith);12、抛异常
            
            
              java
              
              
            
          
          .stream().findFirst().orElseThrow(() -> new IllegalArgumentException("no available"))13、排序
            
            
              java
              
              
            
          
          .stream().sorted(Comparator.comparingInt(VO::getTerms)).collect(Collectors.toList());14、逆序
            
            
              java
              
              
            
          
          .stream().sorted(Comparator.comparingInt(VO::getIndex).reversed()).collect(Collectors.toList());15、转为map
            
            
              java
              
              
            
          
          .stream().collect(Collectors.toMap(Record::getId, v -> v));16、flatMap返回Stream,还可以继续.
            
            
              java
              
              
            
          
          .stream().flatMap(Collection::stream).filter(Objects::nonNull).collect(Collectors.toList());17、遍历
            
            
              java
              
              
            
          
          .stream().forEach(x -> x.setCode(code));18、计数
            
            
              java
              
              
            
          
          .stream().count();19、逗号分隔
            
            
              java
              
              
            
          
          .collect(Collectors.joining(","));20、去重
            
            
              java
              
              
            
          
          .distinct()21、获取任意一个,类似findFirst
            
            
              java
              
              
            
          
          .stream().findAny().get().getOrderId();22、如果当前值存在,传入一个Consumer
            
            
              java
              
              
            
          
          .ifPresent(info -> {System.out.println(info)});23、如果存在值则返回true,否则返回false
            
            
              java
              
              
            
          
          .isPresent()24、转为set
            
            
              java
              
              
            
          
          .collect(Collectors.toSet());