LambdaTest.java
package jp.ac.utsunomiya_u.is; public class LambdaTest { @FunctionalInterface private interface Adder { public int add(int x, int y); } public static void main(String[] args) { Adder adder = new Adder() { @Override public int add(int x, int y) { return x + y; } }; System.out.println(adder.add(2, 3)); } }
LambdaTest.javaの修正
package jp.ac.utsunomiya_u.is; public class LambdaTest { @FunctionalInterface private interface Adder { public int add(int x, int y); } public static void main(String[] args) { Adder adder = (int x, int y) -> { return x + y; }; System.out.println(adder.add(2, 3)); } }
ラムダ式の書式
(実装するメソッドの引数)->{処理}
LambdaTest.javaの修正
package jp.ac.utsunomiya_u.is; public class LambdaTest { @FunctionalInterface private interface Adder { public int add(int x, int y); } public static void main(String[] args) { Adder adder = (x, y) -> x + y; System.out.println(adder.add(2, 3)); } }
LambdaTest.javaの修正
package jp.ac.utsunomiya_u.is; public class LambdaTest { @FunctionalInterface private interface Adder { public int add(int x, int y); public int mul(int x,int y); } public static void main(String[] args) { Adder adder = (x, y) -> x + y; System.out.println(adder.add(2, 3)); } }
LambdaTest.javaの修正
package jp.ac.utsunomiya_u.is; public class LambdaTest { @FunctionalInterface private interface Adder { public int add(int x, int y); public default int mul(int x, int y) { return x * y; } } public static void main(String[] args) { Adder adder = (x, y) -> x + y; System.out.println(adder.add(2, 3)); } }
クラス | 説明 | 主な実装されたインターフェース |
---|---|---|
ArrayList<E> | List<E>インタフェースのサイズ変更可能な配列の実装 | List<E> |
LinkedList<E> | List<E>およびDeque<E>インタフェースの二重リンク・リスト実装 | List<E>, Deque<E> |
HashSet<E> | ハッシュ表に連動したSet<E>インタフェースを実装 | Set<E> |
HashMap<K,V> | Map<K,V>インタフェースのハッシュ表に基づく実装 | Map<K,V> |
CollectionTest.java
package jp.ac.utsunomiya_u.is; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.Map; public class CollectionTest { public static void main(String[] args) { { System.out.println("##### 要素の追加 #####"); // ArrayListクラスのインスタンスをString型で生成 ArrayList<String> fruit = new ArrayList<String>(); // ArrayList<String> fruit = new ArrayList<>(); のようにダイヤモンド演算子を使用した方が良い // コレクションに順次,要素を追加 fruit.add("Apple"); fruit.add("Orange"); fruit.add("Banana"); fruit.add("Grape"); // 2番めの要素を表示 System.out.println("fruit[2] = " + fruit.get(2)); // 拡張for文でコレクションの要素に順番にアクセスし,表示 for (String s : fruit) { // fruit.forEach(s -> { のようにラムダ式を使用して簡潔に書くことも可能 System.out.print(s + "\t"); } System.out.println(); System.out.println("##### 要素数と削除 #####"); // sizeメソッドはコレクションの要素数を返す(配列のlengthのようなもの) System.out.println("fruit.size = " + fruit.size()); // "Orange"を削除 fruit.remove("Orange"); // 要素数が1つ減っている System.out.println("fruit.size = " + fruit.size()); // "Orangeが要素にない fruit.forEach(s -> { System.out.print(s + "\t"); }); System.out.println(""); // fruit[1]を削除 fruit.remove(1); // 要素数が1つ減っている System.out.println("fruit.size = " + fruit.size()); // fruit[1]="Banana"なので"Banana"が削除されている fruit.forEach(s -> { System.out.print(s + "\t"); }); System.out.println(); // 要素全てを削除 fruit.clear(); System.out.println("fruit.size = " + fruit.size()); fruit.forEach(s -> { System.out.print(s + "\t"); }); System.out.println(); System.out.println("##### 要素の検索と変更 #####"); // 要素を再度追加 fruit.add("Apple"); fruit.add("Orange"); fruit.add("Banana"); fruit.add("Grape"); // "Orange"に該当する要素番号を返す int i = fruit.indexOf("Orange"); System.out.println("Orange's index is " + i); // fruit[i]を"Mango"に変更 fruit.set(i, "Mango"); fruit.forEach(s -> { System.out.print(s + "\t"); }); System.out.println(); } { System.out.println("##### 要素の順番反転と整列 #####"); // ArrayListクラスのインスタンスをInteger型で生成 (asListを用いて初期化可能) ArrayList<Integer> number = new ArrayList<>(Arrays.asList(3, 7, 4, 8, 2)); number.forEach(i -> { System.out.print(i + "\t"); }); System.out.println(); // Collectionsクラスのreverse()メソッドで順番反転 Collections.reverse(number); number.forEach(i -> { System.out.print(i + "\t"); }); System.out.println(); // Collectionsクラスのsort()メソッドで整列 Collections.sort(number); number.forEach(i -> { System.out.print(i + "\t"); }); System.out.println(); } { System.out.println("##### LinkedListの使い方 #####"); // LinkedListクラスのインスタンスをString型で生成 LinkedList<String> fruit = new LinkedList<>(); // add()メソッドで要素追加 fruit.add("Orange"); fruit.add("Banana"); fruit.add("Grape"); // 要素の最初に"Apple"を追加 fruit.addFirst("Apple"); fruit.forEach(s -> { System.out.print(s + "\t"); }); System.out.println(); } { System.out.println("##### HashSetの使い方 #####"); // HashSetクラスのインスタンスをString型で生成し,初期化 HashSet<String> fruit = new HashSet<>(Arrays.asList("Apple", "Orange", "Banana", "Grape")); fruit.forEach(s -> { System.out.print(s + "\t"); }); System.out.println(); // HashSetに"Orange”を追加 fruit.add("Orange"); // HashSetは同じ要素は保持できない fruit.forEach(s -> { System.out.print(s + "\t"); }); System.out.println(); } { System.out.println("##### HashMapの使い方 #####"); // HashMapクラスのインスタンスをKeyをString型でValueをInteger型で生成 HashMap<String, Integer> fruit = new HashMap<>(); // KeyとValueのセットで追加 fruit.put("Apple", 200); fruit.put("Orange", 100); fruit.put("Banana", 50); fruit.put("Grape", 150); // Keyが"Orange"のもののValueをget()メソッドで取り出す System.out.println("Orange is " + fruit.get("Orange") + " yen."); // 拡張for文でMapの全ての要素にアクセスし表示 for (Map.Entry<String, Integer> m : fruit.entrySet()) { // fruit.entrySet().forEach((m) -> { のようにラムダ式を使用して簡潔に書くことも可能 System.out.print(m.getKey() + " is " + m.getValue() + " yen.\t"); } System.out.println(); // ”Grape”のValueを150から200に変更 fruit.put("Grape", 200); fruit.entrySet().forEach(m -> { System.out.print(m.getKey() + " is " + m.getValue() + " yen.\t"); }); System.out.println(); // Keyが”Banana"のものを削除 fruit.remove("Banana"); fruit.entrySet().forEach(m -> { System.out.print(m.getKey() + " is " + m.getValue() + " yen.\t"); }); System.out.println(); } } }