国产精品免费嫩草研究院|无遮羞动漫在线观看AV|国产麻豆精品传媒AV国产在线|村在线观看|寂寞情人1正版|韩国床震韩国床震古|精品系列专区久久

Optional源碼解析與實踐( 三 )

  • orElseGet(Supplier other): 如果optional不為空 , 則返回optional中的對象;如果為null , 否則調用其他函數并返回調用的結果
  • orElseThrow(Supplier exception): 如果optional不為空 , 則返回optional中的對象;如果為null , 則拋出Supplier函數生成的異常
  • 3)測試代碼
    1. public static void main(String[] args) {
    2. Integer value1 = null;
    3. Integer value2 = 1;
    4. Optional<Integer> optional1 = Optional.ofNullable(value1);
    5. Optional<Integer> optional2 = Optional.of(value2);
    6. try {
    7. if(optional1.isPresent()){
    8. System.out.println("optional1的isPresent結果不為空");
    9. }else{
    10. System.out.println("optional1的isPresent結果為空");
    11. }
    12. }catch (Exception e){
    13. System.out.println("optional1的isPresent判空失敗,原因:"+e.getMessage());
    14. }
    15. try {
    16. if(optional2.isPresent()){
    17. System.out.println("optional2的isPresent結果不為空");
    18. }else{
    19. System.out.println("optional2的isPresent結果為空");
    20. }
    21. }catch (Exception e){
    22. System.out.println("optional2的isPresent判空失敗,原因:"+e.getMessage());
    23. }
    24. optional1.ifPresent(t->{
    25. int i =t+1;
    26. System.out.println("optional1處理后的值是"+i);
    27. });
    28. optional2.ifPresent(t->{
    29. int i =t+1;
    30. System.out.println("optional2處理后的值是"+i);});
    31. Integer value3 = 2;
    32. Integer result = optional1.orElse(value3);
    33. System.out.println("optional1執行orElse處理后的值是"+result);
    34. result = optional2.orElse(value3);
    35. System.out.println("optional2執行orElse處理后的值是"+result);
    36. result = optional1.orElseGet(()-> new Integer(-1));
    37. System.out.println("optional1執行orElseGet處理后的值是"+result);
    38. result = optional2.orElseGet(()-> new Integer(-1));
    39. System.out.println("optional2執行orElseGet處理后的值是"+result);
    40. try {
    41. result = optional1.orElseThrow (()-> new RuntimeException("值是空的"));
    42. System.out.println("optional1執行orElseThrow處理后的值是"+result);
    43. }catch (Exception e){
    44. System.out.println("optional1的orElseThrow拋出異常:"+e.getMessage());
    45. }
    46. try {
    47. result = optional2.orElseThrow (()-> new RuntimeException("值是空的"));
    48. System.out.println("optional2執行orElseThrow處理后的值是"+result);
    49. }catch (Exception e){
    50. System.out.println("optional2的orElseThrow拋出異常:"+e.getMessage());
    4)運行結果
    Optional源碼解析與實踐

    文章插圖
    2.3.5 過濾方法1)源碼
    1. public Optional<T> filter(Predicate<? super T> predicate) {
    2. Objects.requireNonNull(predicate);
    3. if (!isPresent())
    4. return this;
    5. else
    6. return predicate.test(value) ? this : empty();

      經驗總結擴展閱讀