1. 関数型インターフェース


演習 5-1 (個人): 関数型インターフェースを使ってみましょう。

import java.util.function.Function;
 
public class Main{

    // 文字列 "hoge=" + (a-5) を返す関数 Main::hoge を作成してください
    public static String hoge( Integer a ){
        return ?
    }

    public static void main(String[] args) {

        Function< Integer, String > function;

        // 関数型インターフェース function に関数 Main::hoge を代入してください
        function = ?

        // 321 を引数にして function を呼び出し、その結果を表示してください
        System.out.println( function.apply( ? ) ); 
    }
}

結果:

hoge=316

フォルダ「JAVABSC_5_1」を新規作成し、その中に移動します
フォルダ「JAVABSC_5_1」の中で新規に 1 つソースを作ります。ファイル名を「Main.java」とします。
上のコードをコピーして、解答します。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「ソースコード」と「実行結果」を記入して下さい。


2. ラムダ式


演習 5-2 (個人): ラムダ式を使ってみましょう。

import java.util.function.Function;
 
public class Main{

    public static void main(String[] args) {

        Function< Integer, String > function;

        // a を引数に持ち文字列 "hoge=" + (a+1) を返すラムダ式を関数型インターフェースに代入してください
        // 正式版でも省略版でもどちらでも可です
        function = ?

       // 789 を引数にして function を呼び出し、その結果を表示してください
        System.out.println( function.apply( ? ) );
    }
}

結果:

hoge=790

フォルダ「JAVABSC_5_2」を新規作成し、その中に移動します
フォルダ「JAVABSC_5_2」の中で新規に 1 つソースを作ります。ファイル名を「Main.java」とします。
上のコードをコピーして、解答します。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「ソースコード」と「実行結果」を記入して下さい。


3. forEach 文


演習 5-3 (個人): リストに対して forEach を使ってみましょう。

import java.util.ArrayList;

public class Main{

    // (注) Javaのラムダ式はローカル変数にアクセスできないので static int で定義しています
    static private int goukei;

    public static void main(String[] args) {

    	var list = new ArrayList< Integer >();
    	list.add( 4 );
    	list.add( -3 );
    	list.add( 5 );

        // forEach 文をラムダ式を使って list に収められている数値の合計を求めてください
        // ラムダ式の引数は a とします
        // ラムダ式は正式版でも省略版でもどちらでも可です        
        goukei = 0;
        list.forEach( ? );

        System.out.println( goukei ); 
    }
}

結果:

6

フォルダ「JAVABSC_5_3」を新規作成し、その中に移動します
フォルダ「JAVABSC_5_3」の中で新規に 1 つソースを作ります。ファイル名を「Main.java」とします。
上のコードをコピーして、解答します。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「ソースコード」と「実行結果」を記入して下さい。


演習 5-4 (個人): マップに対して forEach を使ってみましょう。

import java.util.HashMap;

public class Main{

    public static void main(String[] args) {

    	var map = new HashMap< String, Integer >();
        map.put( "札幌", 12 );
        map.put( "函館", 34 );
        map.put( "旭川", 56 );
        map.put( "釧路", 34 );

        // 値が34である都市を全て表示してください
        map.forEach( (key,value) -> {
            if( ? ){
              System.out.println( ? );
            }
        } );
    }
}

結果:

函館
釧路

フォルダ「JAVABSC_5_4」を新規作成し、その中に移動します
フォルダ「JAVABSC_5_4」の中で新規に 1 つソースを作ります。ファイル名を「Main.java」とします。
上のコードをコピーして、解答します。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「ソースコード」と「実行結果」を記入して下さい。


演習 5-5 (個人): こちらのソース1で与えた入れ子構造のマップに対して forEach を使ってみましょう。

import java.util.HashMap;

public class Main{
    public static void main(String[] args) {

    	var sincho = new HashMap<String, HashMap<String, Integer>>();

        sincho.put("1組", new HashMap<String, Integer>() );
        sincho.get("1組").put( "安倍", 162 );
        sincho.get("1組").put( "田中", 132 );

        sincho.put("2組", new HashMap<String, Integer>() );
        sincho.get("2組").put( "鈴木", 151 );
        sincho.get("2組").put( "本田", 172 );

        // 下の結果の様に"組,名前,身長"の順に表示する
        sincho.forEach( (key1,value1) -> {
            ?.forEach( (key2,value2) -> {
                System.out.println( ? );
            });
        });
    }
}


結果:

※ こちらで説明したようにHashMapの要素はputした順には保存されないことに注意する

2組,鈴木,151
2組,本田,172
1組,田中,132
1組,安倍,162

フォルダ「JAVABSC_5_5」を新規作成し、その中に移動します
フォルダ「JAVABSC_5_5」の中で新規に 1 つソースを作ります。ファイル名を「Main.java」とします。
上のコードをコピーして、解答します。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「ソースコード」と「実行結果」を記入して下さい。



以下準備中


4. StreamAPI


演習 5-? (個人): StreamAPIを使って「値が30以上かつ40以下の都市名」を表示してみましょう。

import java.util.HashMap;

public class Main{

    public static void main(String[] args) {

    	var map = new HashMap< String, Integer >();
        map.put( "札幌", 12 );
        map.put( "函館", 34 );
        map.put( "旭川", 56 );
        map.put( "釧路", 34 );

        // 値が30以上かつ40以下の都市名を表示して下さい
        map.entrySet().stream()
            .filter( i -> ? && ? ) // 中間操作
            .forEach( i -> System.out.println( ? ) ); // 終端操作
    }
}

結果:

函館
釧路

フォルダ「JAVABSC_5_?」を新規作成し、その中に移動します
フォルダ「JAVABSC_5_?」の中で新規に 1 つソースを作ります。ファイル名を「Main.java」とします。
上のコードをコピーして、解答します。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「ソースコード」と「実行結果」を記入して下さい。


5. スレッド


演習 5-? (個人): ソース1を修正して、以下の様な仕様のプログラムを作成しましょう。

仕様:

・スレッドを3つ(thread1、thread2、thread3)作る
・thread1の処理内容: 3秒待ってから hoge と1回だけ表示する
・thread2の処理内容: 1秒待ってから fuga と1回だけ表示する
・thread3の処理内容: 2秒待ってから piyo と1回だけ表示する

結果:

fuga
piyo
hoge

フォルダ「JAVABSC_5_?」を新規作成し、その中に移動します
フォルダ「JAVABSC_5_?」の中で新規に 1 つソースを作ります。ファイル名を「Main.java」とします。
ソース1をコピーし、解答します。
コンパイルして実行します。
チーム内で答え合わせをしてください。
指定場所に「ソースコード」と「実行結果」を記入して下さい。