Skip to content

Commit 3ac0b31

Browse files
committed
Extract function OptionalUtil.stream(Optional<T>)
1 parent d9d98de commit 3ac0b31

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

webauthn-server-attestation/src/main/java/com/yubico/fido/metadata/FidoMetadataService.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -637,8 +637,7 @@ public TrustRootsResult findTrustRoots(
637637
.trustRoots(
638638
findEntries(attestationCertificateChain, aaguid.map(AAGUID::new)).stream()
639639
.map(MetadataBLOBPayloadEntry::getMetadataStatement)
640-
.filter(Optional::isPresent)
641-
.map(Optional::get)
640+
.flatMap(OptionalUtil::stream)
642641
.flatMap(
643642
metadataStatement ->
644643
metadataStatement.getAttestationRootCertificates().stream())

webauthn-server-demo/src/main/java/com/yubico/webauthn/attestation/YubicoJsonMetadataService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.google.common.collect.Maps;
3131
import com.yubico.internal.util.CertificateParser;
3232
import com.yubico.internal.util.CollectionUtil;
33+
import com.yubico.internal.util.OptionalUtil;
3334
import com.yubico.webauthn.attestation.matcher.ExtensionMatcher;
3435
import com.yubico.webauthn.data.ByteArray;
3536
import java.security.cert.CertificateException;
@@ -124,8 +125,7 @@ public Optional<Attestation> findMetadata(X509Certificate attestationCertificate
124125
.deviceProperties(deviceProps)
125126
.build());
126127
})
127-
.filter(Optional::isPresent)
128-
.map(Optional::get)
128+
.flatMap(OptionalUtil::stream)
129129
.findAny();
130130
}
131131

yubico-util/src/main/java/com/yubico/internal/util/OptionalUtil.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.util.Optional;
44
import java.util.function.BinaryOperator;
55
import java.util.function.Supplier;
6+
import java.util.stream.Stream;
7+
import lombok.NonNull;
68
import lombok.experimental.UtilityClass;
79

810
/** Utilities for working with {@link Optional} values. */
@@ -21,6 +23,17 @@ public static <T> Optional<T> orElseOptional(Optional<T> primary, Supplier<Optio
2123
}
2224
}
2325

26+
/**
27+
* Returns a sequential {@link Stream} with this {@link Optional} as its source.
28+
*
29+
* @param o the {@link Optional} to interpret as a {@link Stream}
30+
* @return a sequential {@link Stream} containing the value of this {@link Optional} if present,
31+
* otherwise an empty {@link Stream}.
32+
*/
33+
public static <T> Stream<T> stream(@NonNull Optional<T> o) {
34+
return o.map(Stream::of).orElseGet(Stream::empty);
35+
}
36+
2437
/**
2538
* If both <code>a</code> and <code>b</code> are present, return <code>f(a, b)</code>.
2639
*

0 commit comments

Comments
 (0)