1. stream().peek(item->{})
与stream().forEach功能类似,不同点在于peek返回原始的stream()流,因而可以反复调用,forEach没有返回值
sream().peek(item->{}).peek(item->{})
2. parallelStream()
和stream()的不同是一个parallelStream流是多线程任务调度,stream()是串行任务调度。因为是多线程,parallelStream在某些情况下比stream()效率更高
补充: 由于parallelStream()是并行流,不适合多个循环之间存在逻辑关联的场景,使用之前需要慎重考虑。
3. sort 和Comparator用来排序
sort是排序算法,Comparator是比较器,可以用来比较日期等
java8的sorted排序用法和sort差不多,有一个不同点在于stream().sorted()不会修改原列表,而是返回一个新的数组,但是sort方法的排序会修改原列表,无返回值。
List<CmInfo> result = cmDao.selectCmInfo();
// 对result按照modifyDatetime日期排序,排序规则是时间较晚的在前。其中reversed是指倒序
result.sort(Comparator.comparing(CmInfo::getModifyDatetime).reversed());
4. Optional的使用
// 获取oldStock中的stockIssuedDate字符串,并将其格式化。其中oldStock可能为空
String oldStockIssuedDateString = Optional.ofNullable(oldStock)
.map(CMCustomerStock:: getStockIssuedDate)
.map(item->item.format(dateTimeFormatter))
.orElse("");
这里如果oldStock为空,则后边的map均不执行,直接返回空字符串。
第一个map是单对象映射,和stream()流的多对象映射返回值不一样。