>source

전화 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();


  • 답변 # 1

    Optional.map() 를 사용할 수 있습니다  그리고 Optional.orElse()  또는 Optional.orElseThrow() :

    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()) {
        // ...
    }
    
    

    또는 더 짧은 변형 :

    trdObj.getAccount().getSubAccounts.stream()
            .max(Comparator.comparing(SubAccount::getSubAccountId))
            .map(SubAccount::getSubAccountId)
            .ifPresent(maxId -> {
                // ...
            });
    
    

  • 답변 # 2

    선택 사항은 값 또는 널을 포함 할 수 있습니다. .get() 에 전화하면  비어있는 Optional (값이 null 인 경우)에서 예외가 발생합니다.

    이를 방지하는 한 가지 방법은 .isPresent() 에 전화하는 것입니다  먼저- .get() 에 대한 호출을 건너 뜁니다.  값이 없으면

    또 다른 방법은 .map() 를 사용하는 것입니다  그리고 .orElse()  @SamuelPhilipp에 설명 된 방법

  • 답변 # 3

    Optional <Long> maxId = trdObj.getAccount().getSubAccounts.stream()
            .max(subAccountEntityComparator).map(SubAccount::getSubAccountId);
    
    

  • 이전 CSS에서 백그라운드 제한을 어떻게 설정합니까?
  • 다음 apache - 해킹 된 사이트 - 200 개 이상의 파일에서 대량의 자바 스크립트를 제거하는 ssh