Java

スポンサーリンク
Java

Java 逆引き集 | ストリーム処理の設計ガイドライン(副作用禁止等) — 保守性向上

ねらいと基本原則ストリーム処理の保守性は「副作用を禁じる」「遅延評価を味方にする」「結合可能な集約を選ぶ」の三本柱で決まります。中間操作は純粋関数(入力だけに依存し、外部状態を変更しない)に徹し、副作...
Java

Java 逆引き集 | Stream を用いたデータ整形パイプライン設計 — パイプラインアーキテクチャ

ねらいと基本方針データ整形パイプラインは「取り込み → 正規化 → 検証 → 集約/変換 → 出力」の流れを、安全に、短く、遅延評価で組み立てる設計です。Stream を軸にすると、巨大データでもメモ...
Java

Java 逆引き集 | parallelStream のベンチマーク方法 — 実運用での検証

ねらいと前提parallelStream は「並列化すれば常に速い」魔法ではありません。効果が出る条件と落とし穴を理解し、順次と並列を同じ環境・同じ入力で比較するのが基本です。並列ストリームは For...
Java

Java 逆引き集 | Stream を使った CSV → オブジェクト変換 — ETL の簡潔化

ねらいと前提CSV をオブジェクトへ変換する ETL は「読み取り → クリーニング → 変換 → 検証 → 出力」の流れです。Stream を使えば、行を遅延で処理しながら宣言的に書けるため、巨大フ...
Java

Java 逆引き集 | lazy evaluation の理解(中間操作は遅延) — 無駄な処理回避

ねらいと前提Stream の中間操作(filter, map, sorted など)は「遅延評価」です。つまり、終端操作(collect, forEach, count など)が呼ばれるまで実行されま...
Java

Java 逆引き集 | Stream と Optional の良い組み合わせ — 値の有無ハンドリング

ねらいと前提値が「あるかもしれない/ないかもしれない」場面で、Optional は null 安全を保ちながら表現できます。Stream は「たくさんの値」を宣言的に流せます。この二つをうまく組み合わ...
Java

Java 逆引き集 | Stream API によるツリー/グラフ探索(再帰を使わないパターン) — 非再帰探索

ねらいと前提ツリー/グラフ探索は「親→子(隣接)」へ辿る処理です。再帰は直感的ですが、スタックあふれや制御の難しさが出ます。非再帰パターンでは、キュー(BFS)やスタック(DFS)を使って自分で「探索...
Java

Java 逆引き集 | reduce で複合オブジェクト集約 — ドメイン集計

ねらいと前提reduce は「ストリームの全要素をひとつの結果へ畳み込む」終端操作です。ドメイン集計では単なる数値の和ではなく、複数フィールドを持つ複合オブジェクト(件数・合計・最小・最大・補助メモな...
Java

Java 逆引き集 | ストリームでの並列グループ化(groupingByConcurrent) — 並列集計

ねらいと前提並列ストリームで「キーごとに集計」するなら、Collectors.groupingByConcurrent が最短で安全です。並列対応の ConcurrentHashMap を内部に使い、...
Java

Java 逆引き集 | キャッシング Collector(memoizing)パターン — 重い計算の最適化

目的と前提「重い計算」をストリームの中で何度も呼ぶと、CPUが燃え、待ち時間が伸び、並列化しても効果が出ません。キャッシング(memoizing)パターンは、同じ入力に対する結果を再利用して、計算を最...
Java

Java 逆引き集 | ストリームのデバッグ技(ログ出力・中間確認) — トラブルシュート

ねらいと前提「ストリームがどこでどう変わっているか」を素早く可視化できると、原因特定が一気に速くなります。中間確認の王道は peek と「小さく材質化(toList など)」の使い分けです。重要なのは...
Java

Java 逆引き集 | Stream と SQL の比較(いつ DB で処理すべきか) — 負荷分散判断

目的と前提「アプリ側で Stream に流すか、DB 側で SQL に任せるか」を正しく判断できると、性能・コスト・保守性が一気に安定します。根本の考え方はシンプルです。データ量が大きいほど「近いとこ...
Java

Java 逆引き集 | 組み合わせ生成(combinatorics via stream) — テストデータ作成

ねらいと基本指針テストデータを作るとき、組み合わせ(直積・順列・組合せ)を手早く生成できると検証の幅が一気に広がります。Java の Stream は「宣言的・短絡・遅延実行」が武器。巨大な結果を丸ご...
Java

Java 逆引き集 | Windowing(スライディング窓)パターン実装 — 時系列処理

目的と前提大量データを Stream で処理するとき、ボトルネックは「CPUよりメモリ」になりがちです。推定でも十分なので、どれだけメモリを消費するかを見積もり、材質化(toList/toMap)を最...
Java

Java 逆引き集 | Windowing(スライディング窓)パターン実装 — 時系列処理

目的と前提時系列処理で「連続 N 件」「直近 N 秒」のように、一定範囲のデータを滑らせながら集計するのがスライディング窓(windowing)です。Java 標準の Stream API には専用ウ...
Java

Java 逆引き集 | イテレータ→ストリームの変換(StreamSupport) — 外部API統合

目的と前提外部APIが Iterator(または Iterable)しか返さないときでも、Stream に変換すれば filter・map・collect などの強力な処理を宣言的に書けます。鍵になる...
Java

Java 逆引き集 | 並列 reduce の適切な設計(結合可能な演算) — 正しさの担保

目的と前提並列 reduce を正しく設計する鍵は「結合可能(結合律を満たす)な演算」と「適切な単位元(identity)」、そして「accumulator と combiner の整合性」です。並列...
Java

Java 逆引き集 | Stream サプライヤーパターン(Supplier を用いる) — 再生成可能性

目的と前提ストリームは「一度流したら終わり」の一回性を持ちます。同じパイプラインで複数の終端操作(count と toList など)をしたい、あるいは同じフィルタや変換を繰り返し適用したい場面では、...
Java

Java 逆引き集 | ストリームチェーンの分割と再利用 — 可読性/保守性

ねらいと基本原則ストリームは「1回流して終わり」の使い捨てモデルです。可読性と保守性を高めたいなら、再利用すべきはストリームそのものではなく「処理の定義(Predicate/Function/Coll...
Java

Java 逆引き集 | ストリームでのランダムアクセスの落とし穴 — パフォーマンス評価

概要と本質ストリームは「順次走査」に強く、「ランダムアクセス」に弱い仕組みです。配列や ArrayList のようなランダムアクセス向きのデータ構造でも、ストリームに乗せるとインデックス指定は基本的に...
Java

Java 逆引き集 | サードパーティライブラリ(jOOλ 等)の活用 — ストリーム拡張

ポイントまとめJava 標準の Stream API は便利ですが、制約もあります。サードパーティライブラリ jOOλ(jOOL) を使うと、タプル型や拡張関数、例外処理の簡略化などが可能になり、St...
Java

Java 逆引き集 | Stream を使った行列変換(transpose) — データ整形

Stream を使った行列変換(transpose) — データ整形「行列の転置(transpose)」とは、行と列を入れ替える操作です。例えば 2×3 の行列を転置すると 3×2 になります。Str...
Java

Java 逆引き集 | Stream の例外リカバリ戦略(fallback) — 途中失敗の処理

Stream の例外リカバリ戦略(fallback) — 途中失敗の処理ストリーム処理の途中で I/O や変換が失敗しても、処理全体を止めずに「回復」させるのが fallback。目的は「止めるべき失...
Java

Java 逆引き集 | IntSummaryStatistics の活用 — 集計情報取得の便利型

IntSummaryStatistics の活用 — 集計情報取得の便利型IntSummaryStatistics は「int の集計情報」をひとまとめに持つユーティリティです。件数・合計・最小値・最...
Java

Java 逆引き集 | Collector joining with delimiter/prefix/suffix — レポート生成

Collector.joining with delimiter/prefix/suffix — レポート生成Stream の要素を文字列としてまとめたいときに便利なのが Collectors.joi...
Java

Java 逆引き集 | flatMap を用いたネスト解除(OptionalやListのネスト) — 構造フラット化

flatMap を用いたネスト解除(OptionalやListのネスト) — 構造フラット化Stream API の flatMap は「入れ子になった構造をフラットにする」ための中間操作です。初心者...
Java

Java 逆引き集 | 並列ストリームでのコンテキスト保持(ThreadLocal の注意) — 意図しない挙動回避

並列ストリームでのコンテキスト保持(ThreadLocal の注意) — 意図しない挙動回避Java の並列ストリームは内部的に ForkJoinPool を使って複数スレッドで処理します。このとき「...
Java

Java 逆引き集 | ストリームの短絡(short-circuit)操作 — パフォーマンス最適化

ストリームの短絡(short-circuit)操作 — パフォーマンス最適化短絡操作は「必要な分だけ処理したら早めに打ち切る」ための仕組みです。無駄な計算や I/O を避け、スループットを上げる実戦テ...
Java

Java 逆引き集 | 並列ストリームと ForkJoinPool のチューニング — スループット向上

並列ストリームと ForkJoinPool のチューニング — スループット向上並列ストリームは「書き換え少なくCPUを使い切る」ための強力な選択肢。ただし闇雲な並列化は遅くなったり結果が壊れます。安...
Java

Java 逆引き集 | Collector.of でカスタム Collector 作成 — 特殊な集約

Collector.of でカスタム Collector 作成 — 特殊な集約Stream API の Collectors には便利な標準 Collector が多数ありますが、特殊な集約処理をした...
Java

Java 逆引き集 | ストリームでの例外処理パターン(ラップ処理) — checked 例外の扱い

ストリームでの例外処理パターン(ラップ処理) — checked 例外の扱いStream のラムダは基本的に checked 例外を投げられません。ファイルやネットワークなどの I/O をストリームの...
Java

Java 逆引き集 | Optional を返すストリーム処理パターン — null 安全

Optional を返すストリーム処理パターン — null 安全Java の Stream API は「結果があるかどうか分からない」処理をするときに Optional を返すメソッドを備えています...
Java

Java 逆引き集 | ファイルの行ストリーム処理(Files.lines) — 大規模ファイル処理

ファイルの行ストリーム処理(Files.lines) — 大規模ファイル処理Java NIO の Files.lines(Path) は、テキストファイルを 1行ずつストリームとして処理できる便利なメ...
Java

Java 逆引き集 | peek の使い方(デバッグ) — 中間ログ

peek の使い方(デバッグ) — 中間ログストリームの「途中」を覗いて、要素がどう変わっているかを確認するのが peek。中間操作としてログを差し挟めるので、フィルタや変換の結果を安全に観察できます...
Java

Java 逆引き集 | Stream 並列化の落とし穴(副作用) — スレッド安全性

Stream 並列化の落とし穴(副作用) — スレッド安全性Java の Stream API は .parallelStream() や .parallel() を使うと簡単に並列化できます。しかし...
Java

Java 逆引き集 | Collectors.toMap の衝突解決(mergeFunction) — Map 化での安全対策

Collectors.toMap の衝突解決(mergeFunction) — Map 化での安全対策Stream を Map に変換するとき、キー重複があると例外になります。Collectors.t...
Java

Java 逆引き集 | Stream.iterate(Java 9 の変化) — シーケンス生成

Stream.iterate(Java 9 の変化) — シーケンス生成Java 8 から導入された Stream.iterate は「初期値から次の値を生成していく」ための便利なメソッドです。Jav...
Java

Java 逆引き集 | range / rangeClosed(数値ストリーム) — 反復生成

range / rangeClosed(数値ストリーム) — 反復生成IntStream/LongStream には数値の連続を作るための range 系メソッドがあり、for ループより短く安全に「...
Java

Java 逆引き集 | IntStream/LongStream/DoubleStream(プリミティブストリーム) — オートボクシング回避

IntStream / LongStream / DoubleStream(プリミティブストリーム) — オートボクシング回避Java の Stream API には、Stream<Integer> ...
Java

Java 逆引き集 | anyMatch/allMatch/noneMatch — 条件検査

anyMatch / allMatch / noneMatch — 条件検査Stream API の終端操作である anyMatch / allMatch / noneMatch は、ストリームの要素...
Java

Java 逆引き集 | max/min/findFirst/findAny — 候補抽出

max / min / findFirst / findAny — 候補抽出Stream API には「候補をひとつ取り出す」ための便利な終端操作がいくつかあります。max/min は「最大値・最小値...
Java

Java 逆引き集 | summarizingInt/Long/Double — 統計情報を一発取得

summarizingInt / summarizingLong / summarizingDouble — 統計情報を一発取得Stream API の Collectors.summarizingI...
Java

Java 逆引き集 | partitioningBy(true/false に分割) — 二分集計

partitioningBy(true/false に分割) — 二分集計Stream API の Collectors.partitioningBy は「条件に合うかどうか」で true/false...
Java

Java 逆引き集 | joining(Collectors.joining) — 文字列結合

joining(Collectors.joining) — 文字列結合Stream API の Collectors.joining は、ストリームの要素を 文字列として結合するための便利な終端操作で...
Java

Java 逆引き集 | collect(Collectors.groupingBy(…)) — グルーピング集計

collect(Collectors.groupingBy(...)) — グルーピング集計Stream API の collect(Collectors.groupingBy(...)) は「キーご...
Java

Java 逆引き集 | reduce の使い方(集約) — 合算や累積計算

reduce の使い方(集約) — 合算や累積計算Stream の「結果をひとつに畳み込む」終端操作が reduce。合計・積・最大最小・連結・カスタム集約まで、柔軟に一行で書けます。初心者が迷う「初...
Java

Java 逆引き集 | distinct / limit / skip — 重複排除・ページング処理

distinct / limit / skip — 重複排除・ページング処理Stream API の中間操作でよく使うのが distinct(重複排除)、limit(先頭から指定件数だけ残す)、ski...
Java

Java 逆引き集 | filter・map・flatMap の使い分け — 条件絞りと展開

filter・map・flatMap の使い分け — 条件絞りと展開「要素を絞る・変換する・入れ子をほどく」をそれぞれ得意とするのが filter、map、flatMap。違いが腹落ちすると、無駄な中...
Java

Java 逆引き集 | Intermediate / Terminal 操作の理解 — パイプライン設計

Intermediate / Terminal 操作の理解 — パイプライン設計ストリームは「中間操作で加工し、終端操作で結果を取り出す」流れで動きます。中間は“つなぐ”、終端は“決着させる”。この違...
Java

Java 逆引き集 | Stream API の基本(stream(), filter, map, collect) — データ変換

Stream API の基本(stream(), filter, map, collect) — データ変換Java 8 以降で導入された Stream API は「コレクションを宣言的に処理する」た...
Java

Java 逆引き集 | Iterator vs Stream の使い分け(遅延評価・メモリ) — 性能設計

Iterator vs Stream の使い分け(遅延評価・メモリ) — 性能設計「大量データをどう処理するか」は設計の肝。Iterator は手続き的で軽量、Stream は宣言的で強力(遅延評価・...
Java

Java 逆引き集 | バッチ処理用チャンク分割(partitioning) — メモリ制御

バッチ処理用チャンク分割(partitioning) — メモリ制御大量データを「少しずつ」処理することで、メモリ使用量と失敗リスクを抑えるのがチャンク分割です。固定サイズで区切って読み・変換・書き込...
Java

Java 逆引き集 | 多次元配列と List<List<T>> の使い分け — 可変性と利便性

多次元配列と List<List<T>> の使い分け — 可変性と利便性Java では「二次元以上のデータ構造」を表す方法が大きく分けて2つあります。多次元配列(int, String など)入れ子の...
Java

Java 逆引き集 | Guava / Apache Commons Collections の利用(拡張ユーティリティ) — 実務ツール

Guava / Apache Commons Collections の利用(拡張ユーティリティ) — 実務ツール標準 Java コレクション API は基本的な機能を提供しますが、実務では「もう少し...
Java

Java 逆引き集 | Collections.newSetFromMap(Map を Set に変換) — カスタム Set 実装

Collections.newSetFromMap(Map を Set に変換) — カスタム Set 実装Java には Collections.newSetFromMap(Map<E,Boolea...
Java

Java 逆引き集 | ThreadLocal を使ったスレッド依存データ管理 — スレッド単位の状態

ThreadLocal を使ったスレッド依存データ管理 — スレッド単位の状態同じ変数名でも、各スレッドが「自分専用の値」を持てるのが ThreadLocal。リクエスト単位のトレースID、フォーマッ...
Java

Java 逆引き集 | Map の null キー/値対応(実装差) — 入出力検証

Map の null キー/値対応(実装差) — 入出力検証Map は実装ごとに「null を許すか」が違います。キーに null を入れると検索や equals/hashCode まわりで混乱しやす...
Java

Java 逆引き集 | コレクション間の差分(removeAll, retainAll) — 差分集計

コレクション間の差分(removeAll, retainAll) — 差分集計差分を取りたいときの定番が removeAll(差集合の除去)と retainAll(共通部分の保持)。どちらも「破壊的(...
Java

Java 逆引き集 | バッファ付きコレクション(LinkedList の代替) — メモリ/性能の考慮

バッファ付きコレクション(LinkedList の代替) — メモリ/性能の考慮「バッファ用途(キュー、先頭・末尾の出し入れ、スライディングウィンドウ)」で LinkedList を選びがちですが、実...
Java

Java 逆引き集 | トポロジカルソート(グラフ→依存解決) — ビルド順や依存解決

トポロジカルソート(グラフ→依存解決) — ビルド順や依存解決「依存関係を持つタスクを順序付けする」典型アルゴリズムが トポロジカルソート。Java での実装は、有向非巡回グラフ(DAG) を前提に、...
スポンサーリンク