一、函数式接口
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());