Skip to Content
Javaへの関数的アプローチ
book

Javaへの関数的アプローチ

by Ben Weidig
March 2025
Intermediate to advanced
414 pages
5h 47m
Japanese
O'Reilly Media, Inc.
Book available
Content preview from Javaへの関数的アプローチ

第7章. ストリームを使う

この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com

ストリームは、Java 8で導入された多くの関数機能を利用し、データを処理するための宣言的な方法を提供する。 ストリームAPIは多くのユースケースをカバーしているが、それらを最大限に活用するためには、さまざまな演算子や利用可能なヘルパークラスがどのように機能するかを知っておく必要がある。

第6章では、Streamsの基礎を説明することに集中した。 この章では、それを基礎として、様々なユースケースにおけるStreamsの作成方法と操作方法を説明する。

プリミティブ・ストリーム

Javaでは、ジェネリックスは(まだ)オブジェクトベースの型にしか使えない。1そのため、int のようなプリミティブ値のシーケンスにStream<T> を使うことはできない。 ストリームでプリミティブ型を使うには、2つの選択肢しかない:

  • オートボクシング

  • 特殊化ストリーム・バリエーション

Javaのオートボクシング・サポート(プリミティブ型と、intIntegerのようなオブジェクト・ベースの対応する型との間の自動変換)は、以下のように自動的に機能するため、簡単な回避策のように見えるかもしれない:

Stream<Long> longStream = Stream.of(5L, 23L, 42L);

しかし、オートボックスには複数の問題がある。 ひとつは、プリミティブ型を直接使う場合と比べ、プリミティブ値からオブジェクトへの変換に伴うオーバーヘッドだ。 通常、このオーバーヘッドは無視できるほど小さい。 しかし、データ処理パイプラインでは、このようなラッパー型の頻繁な生成によるオーバーヘッドが蓄積し、全体的なパフォーマンスを低下させる可能性がある。

プリミティブ・ラッパーのもう1つの問題点は、null 要素の可能性である。プリミティブからオブジェクト型への直接変換は、null になることはないが、パイプラインのどの演算も、プリミティブの代わりにラッパー型を扱わなければならない場合、null を返す可能性がある。

これを緩和するために、JDKの他の関数と同様に、ストリームAPIは、表7-1にリストされているように、オートボクシングに依存しないプリミティブ型intlongdouble のための特殊化された亜種を持っている。

表7-1. プリミティブ・ストリームと等価性
プリミティブ・タイプ プリミティブ・ストリーム ボックスド・ストリーム

int

IntStream

Stream<Integer>

long

LongStream

Stream<Long>

double

DoubleStream

Stream<Double>

プリミティブストリームで利用可能な演算子は、ジェネリックストリームと似ていますが、プリミティブ関数インタフェースを使用します。 例えば、IntStream は、Stream<T> と同様に、要素を変換するためのmap 演算子を提供します。Stream<T> とは異なり、これを行うために必要な高階関数は、特殊化されたバリアントです。IntUnaryOperatorこの関数は、以下の簡略化されたインタフェース宣言が示すように、int を受け取って返す:

@FunctionalInterface
public interface IntUnaryOperator ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

ディフェンシブ・セキュリティ・ハンドブック第2版

ディフェンシブ・セキュリティ・ハンドブック第2版

Lee Brotherston, Amanda Berlin, William F. Reyor
エンジニアが学ぶ会計システムの「知識」と「技術」

エンジニアが学ぶ会計システムの「知識」と「技術」

広川 敬祐, 五島 伸二, 小田 恭彦, 大塚 晃, 川勝 健司

Publisher Resources

ISBN: 9798341625730Supplemental Content