Связывание нескольких опций Java - PullRequest
0 голосов
/ 13 марта 2019
private void validatePGTimingRestrictions(
        Listing listing,
        ListingAutoVerificationResponse listingAutoVerificationResponse) {
    if (Optional.ofNullable(listing.getLastEntryTime()).isPresent()
            && Optional.ofNullable(listing.getTimingRestrictions()).isPresent()
            && !listing.getTimingRestrictions()) {
        listingAutoVerificationResponse.getRejectReasons()
                .add(ListingAutoVerificationErrorMessages.PG_LISTING_TIMING_ERROR);
    }
}

Как мне оптимизировать этот код с помощью цепочки опций и orElseGet. list.getTimingRestrictions () возвращает Boolean, list.getLastEntryTime () возвращает метод String & add из List, также возвращает Boolean.

Ответы [ 3 ]

3 голосов
/ 13 марта 2019

Зачем вам использовать Optional там?

if (listing.getLastEntryTime() != null && !listing.getTimingRestrictions()) {
listingAutoVerificationResponse.getRejectReasons()
           .add(ListingAutoVerificationErrorMessages.PG_LISTING_TIMING_ERROR);
}

сделает трюк, так как getTimingRestrictions является логическим и является примитивным типом, он не должен быть null в любом случае.

2 голосов
/ 13 марта 2019

Если я все понял правильно ...:

if(listing.getLastEntryTime() != null){
    Optional.ofNullable(listing.getTimingRestrictions())
            .filter(x -> !x)
            .ifPresent(x -> <do whatever you want with x here>)
}
1 голос
/ 13 марта 2019

Вы можете отобразить Optional на совершенно другое значение , что позволит вам связать нулевые проверки:

Object a, b, c;
....
Optional.ofNullable(a) // null-check for 'a'
    .map(x -> b) // null-check for 'b'
    .map(x -> c) // null-check for 'c'
    .ifPresent(x -> ...) // do something with a,b,c

В вашем случае:

Optional.ofNullable(listing.getLastEntryTime())
    .map(x -> listing.getTimingRestrictions())
    .filter(x -> !x)
    .ifPresent(x -> ... ); // do something with the listing
...