1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

javaでOptionalのstreamからempty以外のコレクションを得る

Posted at

javaでOptionalのstreamから空で無いものを得ようとするのは結構面倒だった。https://www.baeldung.com/java-filter-stream-of-optional にあるようにfilter()flatMap()で頑張るしかなかった。が、java 9からOptional::streamが追加されてだいぶ楽になった。

いま、以下のような、もし空文字であればOptional.empty()を返す関数がある、とする。これを文字列リストの各要素に適用し、非空文字のリストを得たい、とする。

	static Optional<String> map(String s) {
		if (s.length() == 0) {
			return Optional.empty();
		}
		return Optional.of(s);
	}

filterで頑張るのはこんな感じ。

		List.of("1", "2", ,"", "3").stream()
			.map(Hoge::map)
			.filter(Optional::isPresent)
			.map(Optional::get)
		    .collect(Collectors.toList());

java 9のOptional::streamを使うとこうなる。

		List.of("1", "2", "", "3").stream()
			.map(Hoge::map)
			.flatMap(Optional::stream)
			.collect(Collectors.toList());
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?