Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで5

5.1.1 Stream APIでコレクションの操作はどう変わるか

  • StreamAPIは「作成」「中間操作」「終端操作」の3つの操作からできています

5.1.2 ラムダ式の書き方をマスターする

  • 関数型インターフェイスの代替として使用する
  • (引数) -> { 処理 }
  • ラムダ式の処理が1つしかない場合は、returnと、処理の {}、末尾の ; も省略できます

5.1.3 メソッド参照

5.3.1 要素を置き換える中間操作

  • メソッド名に「map」が入っている中間操作は、要素を置き換えることを目的としています
  • flatMap 要素のStreamを結合する

5.3.2 要素を絞り込む中間操作

  • filter 条件に合致した要素のみに絞り込む
  • limit 指定した件数に絞り込む
  • distinct ユニークな要素のみに絞り込む(重複を排除)

5.3.3 要素を並べ替える中間操作

  • Comparaterは戻り値のint値によって次のように挙動が変わります
    • 0より小さい値の場合 → 第一引数のオブジェクトが前方になる
    • 0より大きい値の場合 → 第二引数のオブジェクトが前方になる
    • 0の場合 → 並び順は変わらない

5.4.1 繰り返し処理をおこなう終端操作

  • forEach このストリームの要素に対してアクションを実行する

5.4.2 結果をまとめて取り出す終端操作

  • collect 要素を走査し、結果を作成する
    • toList
    • toSet
    • joining
    • groupingBy
  • toArray 全要素を配列に変換する
  • reduce 値を集約する

5.4.3 結果を1つだけ取り出す終端操作

  • findFirst 先頭の要素を返す
  • findAny いずれかの要素を返す
  • min 最小の要素を返す
  • max 最大の要素を返す

5.5.1 王道はmap,filter,collect

5.5.2 n回の繰り返しをするIntStream

5.5.3 ListやMapに対して効率的に処理をおこなう

  • List
    • removeIf 引数に与えた関数がtrueを返す要素のすべてをListから削除する
    • replaceAll 引数に与えた関数を通した結果で、Listの全要素を置き換える
  • Map
    • compute 引数に与えた関数の結果をMapに再設定する
    • computeIfPresent キーがあるときだけ、引数に与えた関数の結果をMapに再設定する
    • computeIfAbsent キーがないときだけ、引数に与えた関数の結果をMapに設定する
5.6.1 Streamを用いて列挙した値からListを作成する
5.6.2 Streamを用いて値の範囲からListを作成する

kameyatakefumi.hatenablog.com
kameyatakefumi.hatenablog.com

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで4

4.1.2 配列を初期化する

(1)宣言時に内容が決まっていない → newで要素数のみ指定する
   int array = new int[10];

(2)宣言時に内容が決まっている → 値の一覧を列挙する
   int array = { 1, 2, 3, 4, 5 };

(3)宣言後に内容が決まる、もしくは引数として利用する
   array = new int[] { 1, 2, 3, 4, 5 };

4.1.4 配列のサイズを変更する

  • Java5.0 System.arraycopy
  • Java6.0 Arrays.copyOf

コラム Comparatorか,Comparableか?

  • Comparableによるソート → そのクラス自身の最も自然な並び方によるデフォルトソートとして利用する
  • Comparatorによるソート → 業務的に必要な並び方によるソートとして利用する

4.1.6 可変長引数でメソッドを定義する

  • 引数に配列を指定する場合は可変長引数で記述ができるため呼び出し側で new する必要がなくなる

4.2.2 代表的なコレクションと使い分けの基準

4.3.1 Listインターフェースの基本

4.3.4 Listをソートする

  • Listをソートするためには java.util.Collectionsクラスのsortメソッドを利用します

4.3.5 Listを検索する

  • Listを検索するためには java.util.CollectionsクラスのbinarySearchメソッドを利用します
  • binarySearchメソッドを実行する前に対象のListがソートされてなくてはいけません

4.3.6 Listのイテレーション

  • イテレータには要素を削除するメソッドが用意されており、繰り返し処理をしながら、コレクションから要素を削除できます

4.3.8 Listの実装クラスをどう使い分けるか

  • 配列の途中で要素の追加や削除をおこなうことが多い → LinkedList
  • for文などを使った全体的な繰り返し処理が多い → ArrayList
  • 複数スレッドから同時にアクセスする → CopyOnWriteArrayList

4.4.1 Mapを作成する

4.4.4 Mapの実装クラスをどう使い分けるか

  • キーの大小を意識した部分集合を取り扱う場合 → TreeMap
  • 要素の順序を保持する必要がある場合 → LinkedHashMap
  • 複数スレッドから同時にアクセスする場合 → ConcurrentHashMap
  • その他の場合 → HashMap

kameyatakefumi.hatenablog.com
kameyatakefumi.hatenablog.com

ニンジャスレイヤー (11) ~フィスト・フィルド・ウィズ・リグレット・アンド・オハギ~

ニンジャスレイヤー (11) ~フィスト・フィルド・ウィズ・リグレット・アンド・オハギ~ (角川コミックス・エース)

ニンジャスレイヤー (11) ~フィスト・フィルド・ウィズ・リグレット・アンド・オハギ~ (角川コミックス・エース)

シリアスな巻だな。

ストーリー的にはありきたりな感じなんだけど嫌いじゃない。
人間の心の弱さに焦点があたっている貴重な話に見える。

なんか 銃夢 に近い内容だと思った。

後半は1部?のラストバトルが開始したって所なのかな。

ナンシーさんとニンジャスレイヤーの関係がいまいちわかりづらい。
過去の巻で何回か共戦してるけどね。
コミック化が時系列じゃないのと、内容的に省かれている?コミック化していない?のが、やっぱり効いてて「わからん」ってのが先にくるな。

アガタさん 37歳 なのか。
幸あらんことを願う。

kameyatakefumi.hatenablog.com
kameyatakefumi.hatenablog.com

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで1~3

2.4.1 クラスと変数はキャメルケースで,定数はスネークケースで

  • クラス名 → 大文字始まりのキャメルケース(パスカルケース)
  • 変数   → 小文字始まりのキャメルケース
  • 定数   → すべて大文字で、単語をアンダースコアで区切るスネークケース

2.4.4 「不吉な匂い」がする名前に気をつける

  • XxxInfo
  • XxxData
  • XxxManager

3.1.2 プリミティブ型

// Java7以降
long amount = 123_456_789L;
System.out.println(amount); // 123456789

3.1.3 ラッパークラス

  • プリミティブ型からラッパークラスへの変換は、valueOfメソッドを使う
  • プリミティブ型intの初期値は 0 、ラッパー型Integerの初期値は null
  • ファイルや通信から値を読み込む場合は Integer 推奨
  • 数値計算には int 推奨

3.2.7 インタフェース

  • Java8より、処理内容を定義するdefaultメソッドが追加された
  • 定数を定義することができる
  • メソッドの public abstract は省略可能
  • 定数の public static final は省略可能

3.2.8 匿名クラス

public interface TaskHandler {
    boolean handle(Task task);
}
public class AnonymousClassSample {
    public static void main(String... args) {
        TaskHandler taskHandler = new TaskHandler() {
            public boolean handle(Task task) {
                // taskに関する処理
            }
        };
        Task myTask = new Task();
        taskHandler.handle(myTask);
    }
}

3.3.1 instanceof演算子

3.3.2 オブジェクトの等価性

  • hashCodeメソッドによるハッシュ値には、次の性質があります
    • 同じオブジェクトのハッシュ値は、必ず同一となる
    • ハッシュ値が異なる場合には、異なるオブジェクトである
    • 異なるオブジェクトでもハッシュ値が同じになることがある
  • 高速にオブジェクトの等価判定ができる
  • Objects.hash メソッド
  • toStringメソッド
  • Apache Commons の Commons Lang ライブラリ
@Override
public String toString() {
    return ToStringBuilder.reflectionToString(this);
}

kameyatakefumi.hatenablog.com

GlassFish JDBC Connection Pool の作成、接続確認、JDBC Resources に設定

GlassFish 4.1.1 ではブラウザ上から JDBC Connection Pool の作成を行おうとするとエラーが発生する。
なのでコマンドから作成、接続確認を行い、JDBC Resources に設定する。

前提条件

  • Windows Server 2012 R1
  • GlassFish Server Open Source Edition 4.1.1 (build 1)
  • GlassFishのインストール先は C:\Program Files 直下
  • adminのパスワードを記載したファイル passwords.txt は C:\Program Files\glassfish4\bin に配置
  • Oracle Database が対象

手順

Set-Location "C:\Program Files\glassfish4\bin"

# 作成
.\asadmin --user admin --passwordfile .\passwords.txt create-jdbc-connection-pool --datasourceclassname oracle.jdbc.pool.OracleDataSource --restype javax.sql.DataSource --property user={ユーザ名}:password={パスワード}:url="jdbc\:oracle\:thin\:@{マシン名}\:1521\:{サービス名}" {コネクションプール名}

# 接続確認
.\asadmin --user admin --passwordfile .\passwords.txt ping-connection-pool {コネクションプール名}

# JDBC Resources に設定
.\asadmin --user admin --passwordfile .\passwords.txt set "domain.resources.jdbc-resource.{JDBC Resources JNDI名}.pool-name={コネクションプール名}"