投稿

ラベル(ラムダ式)が付いた投稿を表示しています

[Java] ストリームAPI

ListやSetといったコレクションを扱う際に、すべての要素に処理を行う際、for文を使って順に要素を取り出していましたが、このような逐次処理を簡潔に記述できるようにしたStream<T>型がJava8で導入されました。 ここではStream API(以下ストリームAPI)の使い方についてまとめていきます。 ストリームAPIを使用する目的 ストリームAPIを使用する目的としては以下の通りです。 コレクションや配列の全要素に対して同じように変換する。 コレクションや配列の要素の合計や平均といった統計を取る。 コレクションや配列の要素に対して特定の条件でグルーピングやフィルターを行う。 コレクションや配列から特定の条件に合ったデータを検索する。 ストリームAPIは従来のfor文や拡張for文を置き換えるために用意されたAPIではない。 ストリームオブジェクトの取得 Iterableインターフェースから取得 java.lang.Iterableインターフェースのstream()メソッドで取得します。 コード例 List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Melon"); list.add("Orange"); Stream<String> stream = list.stream(); Streamインターフェースから取得 コード例 Streamインターフェースのofメソッドからも可変長引数で取得することが出来ます。 Stream<String> stream = Stream.of("Apple", "Melon", "Orange"); Arraysクラスから生成 コード例 String[] arrays = {"Apple", "Melon", "Orange"}; Stream<String> stream = Arrays.stream(arrays

[Java] ラムダ式と関数型インターフェース

ラムダ式とは前述の匿名クラスの記述をより簡潔に書くことが出来る記述法で、Java8から導入されました。 また、それに合わせてラムダ式で記述できるいくつかの関数型インターフェースが用意されているので、主要な部分についてまとめていきます。 ラムダ式 構文 インターフェース 変数 = (引数) -> {処理}; 定義例 例えば匿名クラスの説明で利用した次のサンプルコードがあります。 https://www.s-watanabe.work/2022/10/java.html#3 interface Itest { public void doTest(); } public class AnonymousTest { public static void main(String[] args) { Itest itest = new Itest() { @Override public void doTest() { System.out.println("Itest.doTest"); } }; itest.doTest(); } } このコードはラムダ式によって次のように置き換えることが出来ます。 interface Itest { public void doTest(); } public class AnonymousTest { public static void main(String[] args) { Itest itest = () -> { System.out.print("Itest.doTest"); }; itest.doTest(); } } 処理内容が1行の場合、中カッコ{}を省略することができます。 Itest itest = () -> System.out.print("Itest.doTest"); ラムダ式は関数型インター