CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

2015-07-01から1ヶ月間の記事一覧

第4章 JavaFX による GUI プログラミング : 問題 6 : レイアウト

問題 BorderPaneの Top と Bottom の配置をセンタリングせよ サンプル BorderPaneは5つのエリア(Node)を持っている 5つのエリアにボタンを配置すると public void start(Stage stage) throws Exception { BorderPane pane = new BorderPane(); pane.setTop…

第4章 JavaFX による GUI プログラミング : 問題 5 : ObservableValue とラムダ式

問題 次の二つのメソッドを実装せよ public static <T,R> ObservableValue<R> observe(Function<T,R> f, ObservableValue<T> t) public static <T,U,R> ObservableValue<R> observe(BiFunction<T,U,R> f, ObservableValue<T> t, ObservableValue<U> u) このメソッドは、与えられたObservableValueのg</u></t></t,u,r></r></t,u,r></t></t,r></r></t,r>…

第4章 JavaFX による GUI プログラミング : 問題 4 : バインディング

問題 本文のサンプルコード “常に中心に配置される円” を 常に中心に配置され、四辺の少なくとも二つに接する に拡張せよ 解答 “常に中心に配置される円” のコードは以下のとおり import static javafx.beans.binding.Bindings.*; public void start(Stage s…

第4章 JavaFX による GUI プログラミング : 問題 3 : JavaFX Property の遅延作成その2

問題 ほとんどがデフォルトから変化しない多くの JavaFX プロパティを持つクラスで、デフォルトではない値に設定されたり、初めてxxxProperty()メソッドが呼び出されたときにプロパティオブジェクトを作成するようにせよ 解答 本文にあったGreetingクラスとT…

第4章 JavaFX による GUI プログラミング : 問題 2 : JavaFX Property の遅延作成

問題 チャートやテーブルといった多くの JavaFX プロパティを持つクラスでは、ほとんどのプロパティにリスナーが登録されない可能性が高い 従って、プロパティごとにプロパティオブジェクトを持つのは無駄である 最初は普通のフィールドを使用してプロパティ…

第4章 JavaFX による GUI プログラミング : 問題 1 : テキストフィールドとラベル

問題 テキストフィールドとラベルを持つプログラムを実装せよ ラベルのテキストは "Hello, JavaFX"、フォントは100ポイント ユーザーがテキストフィールドを編集したらラベルのテキストを連動して更新する 解答 これこそ、まさに練習問題ですね :-) ついでに…

第4章 JavaFX による GUI プログラミング

Oracle は JavaFX に本気です GUI プログラミングは Java の最大の弱点だった AWT は醜いし、Swing は AWT を基に増築したのでクラスが多すぎて訳が分かんないし Swing でJFrameを作成したときにいくつペインがあります? あと、Swing は一般性にこだわり過ぎ…

第3章 ラムダ式を使ったプログラミング : 問題 24 : Pair の flatMap メソッド

問題 Pair<T>クラスに対するflatMapメソッドを定義できるか? できるとしたら、それは何か? できないとしたら、その理由は何か? 解答 PairにflatMapは定義できない 理由は Pairの要素数が固定されている からである Pairは、明らかにコンテナである でも、その要</t>…

第3章 ラムダ式を使ったプログラミング : 問題 23 : Pair の map メソッド

問題 T 型の対となる二つのオブジェクトを表すPair<T>クラスに対するmap操作を定義せよ 解答 これは簡単ですね public class Pair<T> { public final T first; public final T second; public Pair(T first, T second) { this.first = first; this.second = second</t></t>…

第3章 ラムダ式を使ったプログラミング : 問題 22 : CompletedFuture の flatMap メソッド

問題 CompletableFutureに対するflatMap操作は存在するか? 存在するとしたら、それは何か? 解答 CompletableFuture<T>のmap操作はthenApply(Function<T,U>)メソッドである じゃflatMap操作はどうだろう? T → CompletableFuture<U> なるFunctionからCompletableFuture<U>が</u></u></t,u></t>…

第3章 ラムダ式を使ったプログラミング : 問題 21 : Future の型変換

問題 Future<T>をFuture<U>に変換するメソッド <T, U> Future<U> map(Future<T> future, Function<T, U> mapper) を実装せよ 解答 特にこれと言った工夫もないのだけど… public static <T, U> Future<U> map(Future<T> future, Function<T, U> mapper) { return new new Future<U>() { // タスクの実行の取</u></t,></t></u></t,></t,></t></u></t,></u></t>…

第3章 ラムダ式を使ったプログラミング : 問題 20 : List の要素の型変換

問題 List<T>をList<U>に変換するメソッド <T, U> List<U> map(List<T> list, Function<T, U> mapper) を実装せよ 解答 普通に考えれば以下のようにするだろう ■ 普通 public static <T, U> List<U> map(List<T> list, Function<T, U> mapper) { List<U> result = new ArrayList<U>(list.size()); for (T elem</u></u></t,></t></u></t,></t,></t></u></t,></u></t>…

第3章 ラムダ式を使ったプログラミング : 問題 19 : Stream の reduce メソッド

問題 Stream<T>のreduceメソッドは、以下のように宣言している <U> U reduce(U identify, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) accumulatorの型を BiFunction accumulator と宣言すべきか? 解答 No ! である Stream<T>のreduceメソッドの Java Doc にあ</t></u></u,></u></t>…

第3章 ラムダ式を使ったプログラミング : 問題 18 : Function と例外

問題 Function<T, U>の抽象メソッドと同じシンタックスでチェック例外をスローするラムダ式からFunction<T, U>を生成する unchecked メソッドを実装せよ 解答 本文にCallable<T>からSupplier<T>を生成する unchecked メソッドが載っている ■ Callable<T>からSupplier<T>生成 public s</t></t></t></t></t,></t,>…