Tips

Java 8 練習問題 上級編

Java 8 練習問題 上級編

動作環境と問題内容について

javaの練習問題です。 出題範囲はjava 8 で追加された範囲を中心とします。難易度は Java SE 8 Programmer II の試験と同程度※を想定しています。

※ただし、場合によっては同試験には出題されない内容や形式が含まれることもあります。あくまでも難易度の目安として解答してください。

実行環境は以下の通りです。

JDKのバージョン:java 8 Update181

 

※問題文に書いてあるプログラムを実行する際は自己責任で実行してください。

問題

次のプログラムを作成した。コンパイル、実行に関して以下の問いに答えなさい。

 

プログラム(Sample.java)

import java.util.stream.Stream;

public class Sample{
    public static void main(String[] args){
        Stream.generate(() -> 0)
              .limit(3)
              .forEach(System.out::print);
    }
}

 

問.Sample.javaをコンパイル、実行するとどうなるか。下記の選択肢 a ~ g から正しいものを選べ。

選択肢

a. 000と表示される

b. 012と表示される

c. 123と表示される

d. コンパイルエラー

e. 実行時エラー

f. コンパイル・実行ともにできるが何も表示されない

g. コンパイル・実行ともにできるが実行結果は不定である

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解答

 

a. 000と表示される

 

解説

今回も Stream API の generate() メソッドを利用した問題となっている。

Stream の終端操作で forEach() メソッドを利用している。処理内容はメソッド参照を利用した表示となっている。

generate() メソッドは Oracle の 公式ドキュメント によると「指定されたSupplierによって生成される要素を含む、順序付けされていない無限順次ストリームを返します。」となっている。引数には Supplierインタフェースを実装したオブジェクトをとる。

今回の問題文を見ると、 Supplierインタフェースをラムダ式で適切に実装している。そのため、generate() メソッドで生成される Stream は、各要素が0の、無限順次ストリームとなる。

また、limit() メソッドも利用されている。

limit() メソッドは、Oracle の 公式ドキュメント によると「このストリームの要素をmaxSize以内の長さに切り詰めた結果から成るストリームを返します。」となっている。Stream の要素数を、引数で指定している要素数( maxSize )以内に切り詰める。今回は3が指定されているため、要素数が3つになる。

 

以上から、000と表示される。

 

Stream API の利用時にはラムダ式やメソッド参照も多用されるため、それらに十分に慣れておく必要がある。

また、Java 7 以前の環境にはなかった書き方なので、Java 7 以前から Java を扱っている場合でも、設計や実装時には十分に注意する必要がある。

 

参考:Stream API でよく利用されるインタフェース
※の項目は、Java 8 のAPIの公式リファレンスより。

インタフェース名 インタフェースの説明※
抽象メソッド 抽象メソッドの説明※
備考
Stream API を利用した際の使い方の例
Consumer 単一の入力引数を受け取って結果を返さないオペレーションを表します。
accept 指定された引数でこのオペレーションを実行します。
1つの引数をもとに処理を行うが、結果は返さない。
forEach() メソッドと組み合わせて処理を適用(accept)する際に使われる。
Function 1つの引数を受け取って結果を生成する関数を表します。
apply 指定された引数にこの関数を適用します。
1つの引数をもとに何か値を返す。
map() メソッドと組み合わせて Stream に要素を供給(apply)する際に使われる。
Predicate 1つの引数の述語(boolean値関数)を表します。
test 指定された引数でこの述語を評価します。
引数をもとに、真偽値を返す。
filter() メソッドと組み合わせて、各要素が条件を満たしているかどうかを検査(test)する際に利用される。
Supplier 結果のサプライヤを表します。
get 結果を取得します。
引数なしで、何らかの値を返す。
generate() メソッドと組み合わせて、生成する Stram に要素を取得(get)する際に利用される。

 


 <<前回の問題はこちら   次の問題はこちら>> 


 オススメ!!→ java 8 の問題はこちら

 オススメ!!→ javaのプログラム作成形式の練習問題はこちら

 オススメ!!→ Macで日本語化済のEclipseを導入する方法その1 その2

 オススメ!!→ java関連の記事はこちら

新連載はじまりました!新Java基礎 連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search