Filtering out empty Optionals
up vote
14
down vote
favorite
I want to convert my list of optional strings to a list of strings by getting rid of the empty Optional
s.
Is there a shorter version for achieving this than the following code (except statically importing the methods of Collectors
)?
List<Optional<String>> stringsMaybe = Arrays.asList(Optional.of("Hi"),
Optional.empty(), Optional.of(" there!"));
List<String> strings = stringsMaybe
.stream()
.filter(Optional::isPresent)
.collect(Collectors.mapping(Optional::get, Collectors.toList()));
java stream null optional
add a comment |
up vote
14
down vote
favorite
I want to convert my list of optional strings to a list of strings by getting rid of the empty Optional
s.
Is there a shorter version for achieving this than the following code (except statically importing the methods of Collectors
)?
List<Optional<String>> stringsMaybe = Arrays.asList(Optional.of("Hi"),
Optional.empty(), Optional.of(" there!"));
List<String> strings = stringsMaybe
.stream()
.filter(Optional::isPresent)
.collect(Collectors.mapping(Optional::get, Collectors.toList()));
java stream null optional
add a comment |
up vote
14
down vote
favorite
up vote
14
down vote
favorite
I want to convert my list of optional strings to a list of strings by getting rid of the empty Optional
s.
Is there a shorter version for achieving this than the following code (except statically importing the methods of Collectors
)?
List<Optional<String>> stringsMaybe = Arrays.asList(Optional.of("Hi"),
Optional.empty(), Optional.of(" there!"));
List<String> strings = stringsMaybe
.stream()
.filter(Optional::isPresent)
.collect(Collectors.mapping(Optional::get, Collectors.toList()));
java stream null optional
I want to convert my list of optional strings to a list of strings by getting rid of the empty Optional
s.
Is there a shorter version for achieving this than the following code (except statically importing the methods of Collectors
)?
List<Optional<String>> stringsMaybe = Arrays.asList(Optional.of("Hi"),
Optional.empty(), Optional.of(" there!"));
List<String> strings = stringsMaybe
.stream()
.filter(Optional::isPresent)
.collect(Collectors.mapping(Optional::get, Collectors.toList()));
java stream null optional
java stream null optional
edited Aug 24 '17 at 16:16
200_success
127k15148412
127k15148412
asked Oct 30 '15 at 17:37
Matthias Braun
4661514
4661514
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
24
down vote
accepted
It's more idiomatic to use .map
on the stream instead of Collectors.mapping
:
stringsMaybe.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(toList());
Without introducing a helper method or a custom collector, that's the shortest and clearest way to do this.
Optional
will get a stream
method in java 9, so you will be able to do .flatMap(Optional::stream)
instead of .filter(...).map(...)
.
add a comment |
up vote
-1
down vote
If you are using rxJava you can do something like:
Flux<Optional<String>> maybeStrings = Flux.just(
Optional.of("Hi"),
Optional.empty(),
Optional.of(" there!"));
Flux<String> strings = maybeStrings.handle((maybeString, synchronousSink) ->
maybeString.ifPresent(synchronousSink::next));
New contributor
Hi, on CodeReview it's expected to explain why your solution offers a better alternative than the current code :)
– IEatBagels
2 days ago
The only reason you'd want to use my example instead of the selected answer is if you're operating on a rxJava Flux rather than a Java 8 Stream. Technically this does not answer the question but someone searching for this example may benefit from this snippet none the less.
– Doctor Parameter
yesterday
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
24
down vote
accepted
It's more idiomatic to use .map
on the stream instead of Collectors.mapping
:
stringsMaybe.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(toList());
Without introducing a helper method or a custom collector, that's the shortest and clearest way to do this.
Optional
will get a stream
method in java 9, so you will be able to do .flatMap(Optional::stream)
instead of .filter(...).map(...)
.
add a comment |
up vote
24
down vote
accepted
It's more idiomatic to use .map
on the stream instead of Collectors.mapping
:
stringsMaybe.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(toList());
Without introducing a helper method or a custom collector, that's the shortest and clearest way to do this.
Optional
will get a stream
method in java 9, so you will be able to do .flatMap(Optional::stream)
instead of .filter(...).map(...)
.
add a comment |
up vote
24
down vote
accepted
up vote
24
down vote
accepted
It's more idiomatic to use .map
on the stream instead of Collectors.mapping
:
stringsMaybe.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(toList());
Without introducing a helper method or a custom collector, that's the shortest and clearest way to do this.
Optional
will get a stream
method in java 9, so you will be able to do .flatMap(Optional::stream)
instead of .filter(...).map(...)
.
It's more idiomatic to use .map
on the stream instead of Collectors.mapping
:
stringsMaybe.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(toList());
Without introducing a helper method or a custom collector, that's the shortest and clearest way to do this.
Optional
will get a stream
method in java 9, so you will be able to do .flatMap(Optional::stream)
instead of .filter(...).map(...)
.
answered Oct 30 '15 at 20:58
Misha
86457
86457
add a comment |
add a comment |
up vote
-1
down vote
If you are using rxJava you can do something like:
Flux<Optional<String>> maybeStrings = Flux.just(
Optional.of("Hi"),
Optional.empty(),
Optional.of(" there!"));
Flux<String> strings = maybeStrings.handle((maybeString, synchronousSink) ->
maybeString.ifPresent(synchronousSink::next));
New contributor
Hi, on CodeReview it's expected to explain why your solution offers a better alternative than the current code :)
– IEatBagels
2 days ago
The only reason you'd want to use my example instead of the selected answer is if you're operating on a rxJava Flux rather than a Java 8 Stream. Technically this does not answer the question but someone searching for this example may benefit from this snippet none the less.
– Doctor Parameter
yesterday
add a comment |
up vote
-1
down vote
If you are using rxJava you can do something like:
Flux<Optional<String>> maybeStrings = Flux.just(
Optional.of("Hi"),
Optional.empty(),
Optional.of(" there!"));
Flux<String> strings = maybeStrings.handle((maybeString, synchronousSink) ->
maybeString.ifPresent(synchronousSink::next));
New contributor
Hi, on CodeReview it's expected to explain why your solution offers a better alternative than the current code :)
– IEatBagels
2 days ago
The only reason you'd want to use my example instead of the selected answer is if you're operating on a rxJava Flux rather than a Java 8 Stream. Technically this does not answer the question but someone searching for this example may benefit from this snippet none the less.
– Doctor Parameter
yesterday
add a comment |
up vote
-1
down vote
up vote
-1
down vote
If you are using rxJava you can do something like:
Flux<Optional<String>> maybeStrings = Flux.just(
Optional.of("Hi"),
Optional.empty(),
Optional.of(" there!"));
Flux<String> strings = maybeStrings.handle((maybeString, synchronousSink) ->
maybeString.ifPresent(synchronousSink::next));
New contributor
If you are using rxJava you can do something like:
Flux<Optional<String>> maybeStrings = Flux.just(
Optional.of("Hi"),
Optional.empty(),
Optional.of(" there!"));
Flux<String> strings = maybeStrings.handle((maybeString, synchronousSink) ->
maybeString.ifPresent(synchronousSink::next));
New contributor
edited 2 days ago
New contributor
answered 2 days ago
Doctor Parameter
992
992
New contributor
New contributor
Hi, on CodeReview it's expected to explain why your solution offers a better alternative than the current code :)
– IEatBagels
2 days ago
The only reason you'd want to use my example instead of the selected answer is if you're operating on a rxJava Flux rather than a Java 8 Stream. Technically this does not answer the question but someone searching for this example may benefit from this snippet none the less.
– Doctor Parameter
yesterday
add a comment |
Hi, on CodeReview it's expected to explain why your solution offers a better alternative than the current code :)
– IEatBagels
2 days ago
The only reason you'd want to use my example instead of the selected answer is if you're operating on a rxJava Flux rather than a Java 8 Stream. Technically this does not answer the question but someone searching for this example may benefit from this snippet none the less.
– Doctor Parameter
yesterday
Hi, on CodeReview it's expected to explain why your solution offers a better alternative than the current code :)
– IEatBagels
2 days ago
Hi, on CodeReview it's expected to explain why your solution offers a better alternative than the current code :)
– IEatBagels
2 days ago
The only reason you'd want to use my example instead of the selected answer is if you're operating on a rxJava Flux rather than a Java 8 Stream. Technically this does not answer the question but someone searching for this example may benefit from this snippet none the less.
– Doctor Parameter
yesterday
The only reason you'd want to use my example instead of the selected answer is if you're operating on a rxJava Flux rather than a Java 8 Stream. Technically this does not answer the question but someone searching for this example may benefit from this snippet none the less.
– Doctor Parameter
yesterday
add a comment |
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f109294%2ffiltering-out-empty-optionals%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown