Java

Java

【Java】Javaのメソッド参照の使い方を4パターンで解説

こんにちは、かつコーチです。s -> s.length()のようなラムダ式をあちこちで見かける一方、String::lengthという書き方に戸惑ったことはありませんか。今回はJavaのメソッド参照(既存のメソッドをそのままラムダ式代わりに...
Java

【Java】Javaの並列Stream(parallelStream)の仕組みと使いどころ

こんにちは、かつコーチです。stream()をparallelStream()に変えるだけで速くなると聞いて安易に使い、かえって遅くなった経験はありませんか。今回はStreamAPIの基礎を理解している前提で、並列Streamの仕組みと「使...
Java

【Java】JavaのCollectors活用術:groupingBy・partitioningByで集計処理を簡潔に書く

こんにちは、かつコーチです。Collectors.toList()やtoMap()は使えるようになったものの、groupingByやpartitioningByとなると急に難しく感じませんか。今回はStream・Collectorsの基本を...
Java

【Java】JavaのStream終端操作(collect・reduce)の使い方

こんにちは、かつコーチです。filterやmapで加工したStreamを、結局どうやって最終結果として取り出せばいいのか迷った経験はありませんか。今回はStream処理の締めくくりとなる終端操作(Streamを消費して最終的な結果を返す操作...
Java

【Java】JavaのStream中間操作(filter・map・sorted)の使い方

こんにちは、かつコーチです。前回はStream APIの全体像を解説しましたが、今回は実務で最もよく使う中間操作(Streamを加工して次の処理に渡す操作)であるfilter・map・sortedを掘り下げます。中間操作とは?中間操作の役割...
Java

【Java】Java Stream APIの使い方を基本から解説

こんにちは、かつコーチです。Listをfor文でループしながらif文で絞り込んで、さらに別のListに詰め替える…という処理を書いて、コードが長くなった経験はありませんか。今回はJava 8で導入されたStream API(コレクションの要...
Java

【Java】Javaの関数型インターフェース(Function・Predicate等)の使い方

こんにちは、かつコーチです。ラムダ式を書けるようになったものの、「どの型に代入すればいいのか分からない」と迷った経験はありませんか。今回はJavaが標準で用意している関数型インターフェース(Function・Predicate・Consum...
Java

【Java】Javaのラムダ式の基本を分かりやすく解説

こんにちは、かつコーチです。匿名クラスで1行のロジックを書くためだけに何行もコードを書いて、冗長だと感じたことはありませんか。今回はJavaのラムダ式(無名の関数をその場で定義できる書き方)の基本と、匿名クラスとの違いを解説します。ラムダ式...
Java

【Java】JavaのOptionalでnullを安全に扱う方法

こんにちは、かつコーチです。「メソッドの戻り値がnullかもしれないから、呼び出し側で毎回nullチェックを書く」というのは、地味に手間がかかる作業です。今回はそんなnullチェックの負担を減らしてくれるOptionalの使い方を解説します...
Java

【Java】Javaのジェネリクス境界(extends・super)を使いこなす

こんにちは、かつコーチです。ジェネリクスの基本を押さえた上で、実務で必ずと言っていいほど遭遇するのが? extends Tと? super Tの使い分けです。今回はこの境界ワイルドカードを、PECS原則を軸に整理していきます。extends...
Java

【Java】Javaのジェネリクスの基本を初心者向けに解説

こんにちは、かつコーチです。List<String>のように山括弧を使う書き方は、Listの解説記事で何度も見てきたと思います。今回はこの山括弧の正体であるジェネリクスを、自分でクラスやメソッドを書く側の視点から解説していきます。ジェネリク...
Java

【Java】JavaのCollectionsユーティリティクラスの活用方法

こんにちは、かつコーチです。「Listをソートしたいけど、毎回forループでアルゴリズムを書くのは面倒」と感じたことはありませんか。今回は、そんな定番処理をまとめて解決してくれるCollectionsユーティリティクラスの使い方を紹介します...
Java

【Java】JavaのDeque・Stack・Queueの使い方を比較しながら解説

こんにちは、かつコーチです。「スタックとキューって結局何が違うの?」「Stackクラスは使わない方がいいって聞いたけど本当?」という質問をよくもらいます。今回はJava 21時点でのDeque・Stack・Queueの使い分けを、実際に手を...
Java

【Java】JavaのIteratorの仕組みと拡張for文との関係を解説

こんにちは、かつコーチです。「拡張for文でListを回しながら要素を削除したらエラーになった」という経験はありませんか。今回は拡張for文の裏側で動いているIteratorの仕組みを理解し、この定番のエラーを解決していきます。Iterat...
Java

【Java】JavaのComparator・Comparableの違いと使い方で並び替えをカスタマイズする

こんにちは、かつコーチです。自作クラスのListを並び替えたいとき、sortメソッドを呼んでも「どの基準で並べるか」が分からずエラーになった経験はありませんか。今回はJavaで並び替えの基準を決めるComparableとComparator...
Java

【Java】JavaのMapとは?HashMap・TreeMap・LinkedHashMapの違いを解説

こんにちは、かつコーチです。今回は「キーと値のペアでデータを管理する」Mapについて解説します。実装クラスが3種類あって混乱しやすいポイントなので、それぞれの特徴とつまずきやすい落とし穴を、実際のコード付きで整理していきましょう。Mapとは...
Java

【Java】JavaのSet入門:HashSetとTreeSetの違いを初心者向けに解説

こんにちは、かつコーチです。前回はListを解説しましたが、今回は「重複を許さないデータの集まり」を扱うSetについて説明します。「Listと何が違うの?」「HashSetとTreeSetはどう使い分ける?」という疑問を、実際のコードとつま...
Java

【Java】JavaのList入門:ArrayListとLinkedListの違いを初心者向けに解説

こんにちは、かつコーチです。今回は、Javaでデータをまとめて扱うときによく使うList(複数の値を順番に並べて管理する仕組み)について解説します。「配列と何が違うの?」「ArrayListとLinkedListってどっちを使えばいいの?」...
Java

【Java】JavaのObjectクラスの役割と共通メソッドを理解する

こんにちは、かつコーチです。「継承していないのに、なぜどのクラスでもequals()やtoString()が呼べるのか」と疑問に思ったことはありませんか。今回はすべてのクラスの頂点にあるObjectクラスの役割を整理します。Objectクラ...
Java

【Java】Javaのequals・hashCode・toStringを正しく実装する

こんにちは、かつコーチです。「HashSetに入れたはずのオブジェクトが重複して入ってしまう」といったバグに遭遇したことはありませんか。今回はequals・hashCode・toStringを正しく実装するための考え方を、実際のバグ事例とあ...