JLambda 式と Stream API

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java 8 の 2 つの最も重要な機能であるラムダ式と Stream API の使い方を学びます。ラムダ式は、他のメソッドに引数として渡すことができる匿名関数を作成するために使用されます。一方、Stream API は、コレクションに対して一連の操作を実行するために使用されます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/ConcurrentandNetworkProgrammingGroup(["Concurrent and Network Programming"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/output("Output") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ProgrammingTechniquesGroup -.-> java/lambda("Lambda") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/interface("Interface") java/FileandIOManagementGroup -.-> java/files("Files") java/FileandIOManagementGroup -.-> java/stream("Stream") java/ConcurrentandNetworkProgrammingGroup -.-> java/working("Working") java/SystemandDataProcessingGroup -.-> java/system_methods("System Methods") subgraph Lab Skills java/if_else -.-> lab-117467{{"JLambda 式と Stream API"}} java/output -.-> lab-117467{{"JLambda 式と Stream API"}} java/collections_methods -.-> lab-117467{{"JLambda 式と Stream API"}} java/lambda -.-> lab-117467{{"JLambda 式と Stream API"}} java/interface -.-> lab-117467{{"JLambda 式と Stream API"}} java/files -.-> lab-117467{{"JLambda 式と Stream API"}} java/stream -.-> lab-117467{{"JLambda 式と Stream API"}} java/working -.-> lab-117467{{"JLambda 式と Stream API"}} java/system_methods -.-> lab-117467{{"JLambda 式と Stream API"}} end

Java 環境をセットアップする

まず、システムに最新版の Java をインストールすることで Java 環境をセットアップします。公式サイトから Java をダウンロードしてインストールできます。インストール後、ターミナルを開き、Java のバージョンを確認します。

java -version

Java ファイルを作成する

次に、~/project ディレクトリに新しい Java ファイル LambdaExpressions.java を作成します。

touch ~/project/LambdaExpressions.java

このファイルには、ラムダ式と Stream API を実装するコードを記述します。

ラムダ式を使って二つの数の和を計算する

ラムダ式は、匿名関数を作成する簡単な方法を提供します。二つの数を入力として受け取り、それらの和を返す関数を表す FunctionalInterface を作成します。

interface Calculator {
  int sum(int a, int b);
}

次に、ラムダ式を使ってこのインターフェイスのオブジェクトを作成し、そのオブジェクトを使って sum() 関数を呼び出すことができます。

  Calculator adder = (a, b) -> a + b;
  int result = adder.sum(10, 20);
  System.out.println("Result: " + result);

次に、以下のコマンドを使ってこのコードをコンパイルして実行します。

javac ~/project/LambdaExpressions.java && java LambdaExpressions

出力は以下のようになるはずです。

Result: 30

Stream API を使ってコレクションを反復処理する

Stream API は、コレクションに対して一連の操作を実行するために使用されます。このステップでは、文字列のコレクションを反復処理し、「A」で始まる文字列をフィルタリングする方法を学びます。

操作対象となるいくつかの名前を含む文字列のリストを作成します。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Andy");

次に、Stream API を使ってこのコレクションを反復処理し、「A」で始まる文字列をフィルタリングし、残りの文字列をコンソールに出力します。

  names.stream().filter(s -> s.startsWith("A")).forEach(System.out::println);

次に、以下のコマンドを使ってこのコードをコンパイルして実行します。

javac ~/project/LambdaExpressions.java && java LambdaExpressions

出力は以下のようになるはずです。

Alice
Andy

Stream API を使って整数のリストから最大値と最小値を求める

Stream API は、コレクションに対して一連の操作を行う方法を提供します。このステップでは、Stream API を使って整数のリストから最大値と最小値を求める方法を学びます。

整数のリストを作成します。

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Stream API を使ってリストの最大値を求めます。

Optional<Integer> maxNum = numbers.stream().max(Integer::compareTo);
System.out.println("Maximum number: " + maxNum.get());

Stream API を使ってリストの最小値を求めます。

Optional<Integer> minNum = numbers.stream().min(Integer::compareTo);
System.out.println("Minimum number: " + minNum.get());

次に、以下のコマンドを使ってこのコードをコンパイルして実行します。

javac ~/project/LambdaExpressions.java && java LambdaExpressions

出力は以下のようになるはずです。

Maximum number: 30
Minimum number: 2

forEach() を使ってリストの要素を出力する

Stream API の forEach() メソッドを使って、リストを反復処理し、各要素に対してアクションを実行することができます。

操作対象となるいくつかの名前を含む文字列のリストを作成します。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");

forEach() メソッドを使ってリストのすべての要素を出力します。

names.stream().forEach(System.out::println);

次に、以下のコマンドを使ってこのコードをコンパイルして実行します。

javac ~/project/LambdaExpressions.java && java LambdaExpressions

出力は以下のようになるはずです。

Alice
Bob
Charlie
Dave

Stream API を使ってコレクションをソートする

Stream API を使ってコレクションをソートすることができます。このステップでは、整数のリストを昇順にソートする方法を学びます。

操作対象となる整数のリストを作成します。

List<Integer> numbers = Arrays.asList(1, 3, 2, 4, 5);

Stream API の sorted() メソッドを使ってリストを昇順にソートします。

numbers.stream().sorted().forEach(System.out::println);

次に、以下のコマンドを使ってこのコードをコンパイルして実行します。

javac ~/project/LambdaExpressions.java && java LambdaExpressions

出力は以下のようになるはずです。

1
2
3
4
5

Stream API を使ってコレクションをフィルタリングしてソートする

このステップでは、Stream API を使って整数のコレクションをフィルタリングしてソートします。

操作対象となる整数のリストを作成します。

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

偶数のみをフィルタリングし、sorted() メソッドを使って降順にソートします。

numbers.stream().filter(n -> n % 2 == 0).sorted(Comparator.reverseOrder()).forEach(System.out::println);

次に、以下のコマンドを使ってこのコードをコンパイルして実行します。

javac ~/project/LambdaExpressions.java && java LambdaExpressions

出力は以下のようになるはずです。

30
20
10
4
2

Stream API を使ってコレクションの平均値を求める

このステップでは、Stream API を使って整数のコレクションの平均値を求める方法を学びます。

操作対象となる整数のリストを作成します。

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Stream API の average() メソッドを使ってリストの平均値を求めます。

OptionalDouble avg = numbers.stream().mapToInt(Integer::intValue).average();
System.out.println("Average: " + avg.getAsDouble());

次に、以下のコマンドを使ってこのコードをコンパイルして実行します。

javac ~/project/LambdaExpressions.java && java LambdaExpressions

出力は以下のようになるはずです。

Average: 12.0

Optional オブジェクトを作成して、それが空かどうかを確認する

このステップでは、Optional とは何か、および Optional オブジェクトを作成する方法を学びます。

空の文字列を持つ Optional オブジェクトを作成します。

Optional<String> emptyString = Optional.empty();

isPresent() メソッドを使ってこのオブジェクトが空かどうかを確認します。

if(emptyString.isPresent()) {
    System.out.println(emptyString.get());
}
else {
    System.out.println("No value");
}

次に、以下のコマンドを使ってこのコードをコンパイルして実行します。

javac ~/project/LambdaExpressions.java && java LambdaExpressions

出力は以下のようになるはずです。

No value

まとめ

この実験では、Java 8 の最も重要な機能の 2 つであるラムダ式と Stream API の使い方を学びました。ラムダ式を使って匿名関数を作成する方法、コレクションに対して一連の操作を行うために Stream API を使う方法、および Optional オブジェクトを作成してそれが空かどうかを確認する方法を学びました。また、Stream API を使ってコレクションをソート、フィルタリングして平均値を求める方法も見ました。これらの機能をマスターすることで、Java 8 を使って効率的でクリーンなコードを書くことができます。