投稿

1月26日(火)1コマ目

イメージ
今日、やったこと Optional演習の解説(情報工学実習のやり残し) 今日のホワイトボード Optional演習の解説 Optionalが保持するインスタンスを取得する いろいろなメソッドが用意されているため、ごちゃごちゃになりやすいです。 まとめてみました。 図 Optionalが保持するインスタンスを取得する 問6 人口チェック 今までの描き方ではif() ~ else if() ~ elseとなりますが、Optionalを使うと図のようにネスト構造になります。 図 問6 人口チェック ソースコード いちおうあげておきます。

1月14日(木)1、2コマ目

イメージ
今日、やったこと 演習(Optional<T>クラス) 今日のホワイトボード メソッド利用①「各都道府県の人口が300万人以上かチェック」 ポイントはif()を使って、300万以上と未満の場合の処理を分岐させるところをOptionalクラスをうまく使ってif()を排除する点です。 図 メソッド利用①「人口が300万人以上かチェック」 今日、解説した部分までのソースをあげておきます。 Optional<T>演習 1月14日版  

1月7日(木)1、2コマ目

イメージ
今日の予習 Optional<T>クラス java.util.Optional<T>について話をします。 サンプルソースをあげときます。 その0 Optional<T>未使用。nullを取得、toString()を呼び出すとNullPointerExceptionがスローされる。 その1 Employeeのインスタンスを保持するOptional<T>生成。 isPresent()でOptionalインスタンスがnullかチェック。 その2 orElse()でOptionalインスタンスが保持する値を取得。 Optionalインスタンスが保持する値がnullならID=0、名前=ダミーのEmployeeインスタンスを生成する。 その3  orElseGet()でOptionalインスタンスが保持する値を取得。 Optionalインスタンスが保持する値がnullならID=0、名前=ダミーのEmployeeインスタンスを生成する。 その4 ifPresent()でOptionalインスタンスが保持する値が非nullなら表示実行。 その5 map()でOptionalインスタンスが保持する値をEmployeeからStringへ加工。 その6 filter()でOptionalインスタンスが保持する値の部署がDept.ADMINかチェック。 今日のホワイトボード null? Javaはプリミティブ型(intとかlogn、double)変数を除き、xxクラス型の変数にはインスタンスへの参照情報が代入される。 図 参照情報がない = nullが代入されている 上図左側のString型変数strは参照すべきインスタンスがありません。そんなときにはnullが代入されています。 参照情報がない = nullが代入されている です。 さらに参照情報がない変数strでlength()メソッドを呼び出しています。 length()はインスタンスメソッドです。 しかしながらstrが参照するインスタンスがないため、NullPointerExceptionがスローされます。 Optional<T>クラス Optional<...

12月24日(木)1、2コマ目

イメージ
今日やったこと 演習課題(ストリームAPI) 今日の課題 ホワイトボードに書いたヒント 図 ヒント 一応、解答例です。 その1 Serviceクラス IndexSrvクラス(サーブレット) index.jsp その2 Serviceクラス IndexSrvクラス(サーブレット) index.jsp  

12月17日(木)1、2コマ目

イメージ
今日、やったこと ストリームAPI(特に終端操作) 今日のホワイトボード ラムダ式で使える変数 引数やローカル変数(ラムダ式が長くなるため使いたくない)は当然OKですが、ラムダ式の外で宣言された変数も実質finalならアクセス可能です。 図 ラムダ式からラムダ式の外で宣言した変数にアクセス 中間操作のfilter()で複数条件のorを行いたい filter()の引数はPredicate<T>です。このPredicate<T>にはor(Predicate<T>)メソッドがあります。or()メソッドは2つのPredicateインスタンスのorを行うPredicateのインスタンスを返します。 図 filter()で複数条件のorを使う 例 地域名が中国 か 四国 [or()を使わない] PrefectureDAO.findAll() .stream() .filter( p->p.getArea().equals("中国") || p.getArea().equals("四国") ) ・・ [or()を使う] // まずは中国地方で検索用Predicate生成 Predicate<Prefecture> pred = p->p.getArea().equals("中国"); // or()メソッドで 中国地方検索用Predicate || 九州地方検索用Predicate生成 pred = pred.or(p->p.getArea().equals("九州")); PrefectureDAO.findAll() .stream() .filter( pred ) ・・ 終端操作collect() 終端操作のなかでももっともオールマイテ...

12月10日(木)1、2コマ目

イメージ
今日、やったこと ストリームAPI(中間操作、終端操作) 今日のホワイトボード (おさらい)ストリームAPIのイメージ ストリームに対して、中間操作(フィルタリング、データ加工、ソート)を行い、最後に終端操作でほしいデータだけ取り出す(最大値や最小値)、ほしいデータへ変更(リストへ)する。 図 ストリームAPIのイメージ [中間操作]map():データの加工 ストリーム中の各データを加工します。 例えば、「Employeeクラスのインスタンスから氏名だけを取り出す」等。 図 [中間操作]map() [中間操作]sorted():ソート ソートです。 ストリームの各要素のソートを行います。 引数で渡されたComparatorの戻り値が正の場合、2つの要素を入れ替えます。 図 [中間操作]sorted() 練習問題 練習1 部署がADMINかDEVELOPな人をIDの昇順で出力。 ただし、出力フォーマットは以下のとおり。 [ID]氏名(部署)サラリー 練習2 サラリートップ3をサラリーの降順で出力。 ただし、出力フォーマットは以下のとおり。 氏名(部署)サラリー。 終端操作 ストリームの各データをリストにまとめたり、最大値や最小値を取得したりとストリームからほしいデータだけを取り出したり、別の形へ変更します。 図 終端操作(左側) Optional<T>型 終端操作のmax()やmin()の戻り値はOptional<T>型です。 Optional<T>型はT型のインス...