orElse 和 orElseGet 的区别

orElse 是无论如何都会执行的。例如一下代码:

        Optional<ImportHistorySummaryEntity> entityOptional = summaryRepository.findFirstByIhsTime(CalFunction.stringToDate(FRONT_END_SHORT_DATE_FORMAT, dateString));
        ImportHistorySummaryEntity summaryEntity = entityOptional.orElse(newSummaryEntity(FRONT_END_SHORT_DATE_FORMAT, dateString));

 

即使 entityOptianl 并非 Optional.empty, 第二行的  newSummaryEntity(FRONT_END_SHORT_DATE_FORMAT, dateString) 代码还是会运行的。

即使赋值的时候  summaryEntity 不会赋予 orElse 的值 !!

即使赋值的时候  summaryEntity 不会赋予 orElse 的值 !!

即使赋值的时候  summaryEntity 不会赋予 orElse 的值 !!

 

而 orElseGet 则不会有这个问题

posted @ 2017-08-31 21:56  Vincent Zhang  阅读(3651)  评论(0编辑  收藏  举报