访问值之前,我无法解决错误呼叫Optional#isPresent()
。
尝试如下:
Optional <Long> maxId = trdObj.getAccount().getSubAccounts.stream()
.max(subAccountEntityComparator).get().getSubAccountId();
Comparator<SubAccount> subAccountEntityComparator = Comparator
.comparing(SubAccount::getSubAccountId);
Long maxId = trdObj.getAccount().getSubAccounts.stream()
.max(subAccountEntityComparator).get().getSubAccountId();
答案 0 :(得分:1)
您可以使用Optional.map()
和Optional.orElse()
或Optional.orElseThrow()
:
findstring /v File.txt > small_file.txt
这将映射结果值(如果存在)。如果不是,则返回Long maxId = trdObj.getAccount().getSubAccounts.stream()
.max(Comparator.comparing(SubAccount::getSubAccountId))
.map(SubAccount::getSubAccountId)
.orElse(0);
的值,或者如果使用orElse()
则抛出异常。
这是orElseThrow()
的示例:
orElseThrow()
如果未找到结果是错误的话,这可能很有用。
如果您只想在值存在的情况下执行某些操作,则可以使用以下方法:
Long maxId = trdObj.getAccount().getSubAccounts.stream()
.max(Comparator.comparing(SubAccount::getSubAccountId))
.map(SubAccount::getSubAccountId)
.orElseThrow(RuntimeException::new);
或更短的变体:
Optional<Long> maxId = trdObj.getAccount().getSubAccounts.stream()
.max(Comparator.comparing(SubAccount::getSubAccountId))
.map(SubAccount::getSubAccountId);
if (maxId.isPresent()) {
// ...
}
答案 1 :(得分:1)
一个Optional可以包含一个值或一个null。如果您在空的Optional(值为null的可选)上调用.get()
,则会收到异常。
防止这种情况发生的一种方法是先调用.isPresent()
-如果没有值,则跳过对.get()
的调用。
另一种方法是使用@SamuelPhilipp描述的.map()
和.orElse()
方法。
答案 2 :(得分:-1)
Optional <Long> maxId = trdObj.getAccount().getSubAccounts.stream()
.max(subAccountEntityComparator).map(SubAccount::getSubAccountId);