エンタープライズギークス (Enterprise Geeks)

企業システムの企画・開発に携わる技術者集団のブログです。開発言語やフレームワークなどアプリケーション開発に関する各種情報を発信しています。ウルシステムズのエンジニア有志が運営しています。

Stream

Java8超入門 - for文の代わりにStreamを使おう(3)

前回の記事では、Stream APIのfilterメソッドを使って、集合データから条件に合致する要素を抽出する方法を紹介した。 今回は集合データ内の要素を変換するmapメソッドを紹介する。 これまでと同様に、シンプルなPersonクラスを利用する。 public class Pers…

Java8超入門 - for文の代わりにStreamを使おう(2)

だいぶ間が空いてしまったが、Java8の超入門記事の第2回である。 前回の記事では、forループの代わりにStream APIのanyMatchメソッドを使って、コレクション全体に対する条件判定を行う方法を紹介した。 今回は、コレクションから条件に該当する要素を抽出す…

Java8超入門 - for文の代わりにStreamを使おう(1)

今年の3月にリリースされたJava8では、関数型インターフェース、ラムダ式、Stream、Optionalなど、関数型言語の仕組みが導入された。 このブログでも、これまでJava8の新機能の解説記事をたくさん書いてきたが、具体的にどんな場面で使えばいいのだろう、と…

Stream APIの拡張(2) - 委譲方式による拡張

前回の記事では、Stream APIを拡張する方法として、特殊な性質を持つStreamを生成する方法を紹介した。 今回は、委譲を使ってStreamを拡張する方法を紹介する。 委譲によるStream APIの拡張 委譲を使ってStreamを拡張する場合、元のStreamを内部に保持するSt…

Stream APIの拡張(1) - 生成処理の拡張

Stream APIには、他の言語の同様の機能(すなわちHaskellのリスト([])やScalaのコレクション、C#のLINQなど)と比較すると、存在しない機能がいくつかあり、その中には有用なものがある。 以前の記事で紹介したzipもその中の一つだ。 今回は、HaskellやSca…

Java8 Stream APIの基本(7) - 終端操作2(Stream#collect)

今回はStream#collectの内部構造の概要を紹介する。 以前の記事では、Streamで加工したデータをList等のデータ構造に変換する際にcollect(Collectors.toList())のようなコードを書いた。 しかしStream#collectはStream APIの汎用的な終端操作であるため、Lis…

Java8 Stream APIの基本(6) - 終端操作の概要

今回から、3回に分けてJava8 Stream API の終端操作について解説する。 終端操作は Stream の中の要素を実際に処理をする工程であり、fliter 等の中間操作は終端操作をトリガーにして初めて実行される。 中間操作を適用した要素に対して、終端操作で処理し、…

Java8 Stream APIの基本(5) - zip の実装

先日のStream APIの基本(4)では Spliteratorについて解説したが、2つのリストを扱う方法やインデックスアクセスの方法については記述しなかった。 またStream APIの基本(2)では、 並列処理では2つの要素から順番に要素を取得するには工夫が必要であると述べ…

Java8 Stream APIの基本(4) - ストリームの内部

先日の記事ではStreamの基本的な生成処理について述べた。 今回はStreamの内部処理で扱われるSpliteratorについて解説する。 Spliterator Spliteratorは分割可能なイテレータであり、Streamの低レベルAPI用のインターフェースである(名前の由来はsplitとite…

Java8 Stream APIの基本(3) - ストリーム生成

ストリームの生成方法についてまとめる。 ストリームを作成するAPIはコレクションなどの既存のクラスのいくつかに追加されており、Streamのstaticメソッドにもストリームを生成する手段が提供されている。 また、Streamの要素走査の中心的な役割である Split…

Java8 Stream APIの基本(2) - 中間操作の種類と並列処理、副作用

Java 8 Stream API の中間操作の種類・並列処理・それらの注意点についてまとめておく。 プリミティブ型のStream 中間操作のメソッドを見ると、mapの他に、mapToInt,mapToLong, mapToDoubleのような、プリミティブ型への変換を行うメソッドがある。 また、 S…

Java8 Stream APIを使ったピタゴラス数生成処理

先日の記事では、Stream APIの基本的な仕組みを書いた。今回はサンプルコードとして、ピタゴラス数を生成する処理をStreamで書いてみる。 ピタゴラス数とは、三平方の定理でおなじみの a * a + b * b = c * c を満たす自然数の組のことだ。 最初のピタゴラス…

Java8 Stream APIの基本(1) - 代表的な中間操作

Java8で新たに提供されたStream APIの基本をまとめておく。 (今回は並列処理機能については割愛する。) 概要 Stream API はJava8から追加されたAPIであり、高機能な繰り返し処理を記述できる。同じくJava8から追加されたラムダ式の使用を前提としている。 …