はじめに
この実験では、Java 8 の 2 つの最も重要な機能であるラムダ式と Stream API の使い方を学びます。ラムダ式は、他のメソッドに引数として渡すことができる匿名関数を作成するために使用されます。一方、Stream API は、コレクションに対して一連の操作を実行するために使用されます。
この実験では、Java 8 の 2 つの最も重要な機能であるラムダ式と Stream API の使い方を学びます。ラムダ式は、他のメソッドに引数として渡すことができる匿名関数を作成するために使用されます。一方、Stream API は、コレクションに対して一連の操作を実行するために使用されます。
まず、システムに最新版の Java をインストールすることで Java 環境をセットアップします。公式サイトから Java をダウンロードしてインストールできます。インストール後、ターミナルを開き、Java のバージョンを確認します。
java -version
次に、~/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 は、コレクションに対して一連の操作を実行するために使用されます。このステップでは、文字列のコレクションを反復処理し、「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 を使って整数のリストから最大値と最小値を求める方法を学びます。
整数のリストを作成します。
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
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 を使ってコレクションをソートすることができます。このステップでは、整数のリストを昇順にソートする方法を学びます。
操作対象となる整数のリストを作成します。
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 を使って整数のコレクションをフィルタリングしてソートします。
操作対象となる整数のリストを作成します。
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 を使って整数のコレクションの平均値を求める方法を学びます。
操作対象となる整数のリストを作成します。
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<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 を使って効率的でクリーンなコードを書くことができます。