Java すっきり分かる 実践編 02 - user000422/0 GitHub Wiki
enum … 列挙型(指定種類の値のみ入れることができる)
列挙子は慣習として大文字
enum Color {
RED, BLUE, GREEN; // 列挙子(値)(enum定数)
}
関数
// 変数へのメソッド参照の格納
変数名 = クラス名::そのクラスの静的メソッド名;
変数名 = インスタンス変数名::そのインスタンスのメソッド名;
// 格納でのインターフェース(SAMインターフェース)の選び方
IntBinaryOperator ○○○ = xxx::zzz; // 引数(int, int), 戻り値 int, メソッド名 applyAsInt
IntToLongFunction ○○○ = xxx::zzz; // 引数(int), 戻り値 long, メソッド名 applyAsLong
IntToDoubleFunction ○○○ = xxx::zzz; // 引数(int), 戻り値 double, メソッド名 applyAsDouble
IntConsumer ○○○ = xxx::zzz; // 引数(int), 戻り値 なし, メソッド名 accept
IntSupplier ○○○ = xxx::zzz; // 引数(int), 戻り値 int, メソッド名 getAsInt
IntPredicate ○○○ = xxx::zzz; // 引数(int), 戻り値 boolean, メソッド名 test
// 変数に格納された関数の呼び出し
関数を格納した変数の名前.SAMインターフェースのメソッド名(引数);
// ラムダ式 … 関数定義、その実態を即時生成
(型 引数名) -> {
// 処理 ;
return 戻り値;
};
// ラムダ式省略 … 代入時に代入先の変数の型に自動変換される性質を利用
IntToDoubleFunction ○○○ = (x) -> { /* 処理内容 */ }; // int型 を 省略
// ラムダ式省略 … 引数が1つの場合丸カッコを省略可
IntToDoubleFunction ○○○ = x -> { /* 処理内容 */ }; // 丸カッコ を 省略
// ラムダ式省略 … 式が単一の場合は 波カッコ と return を省略可
IntToDoubleFunction ○○○ = x -> /* 処理内容 */ ; // 波カッコ と return を 省略
// ラムダ式はアクセス可能な全ての変数を式内で利用可(書き換えは不可)
stream
Java 8 から Collection を実装しているクラスは stream()メソッドを持つ
// forEach … 各要素に対して繰り返し処理
○○○.stream().forEach( x -> a );
commons … Apacheソフトウェア財団 の ライブラリ
commons-lang
… http://commons.apache.org/lang
最新バージョンのzipをダウンロード -> 解凍 -> commons-lang3-xxx-.jar
を取り出す
// EqualsBuilder … すべてのフィールドが等価ならインスタンスも等価と見なす機能
// equals の オーバーライドが簡単に記述可能に
public boolean equals(object o) {
return EqualsBuilder.reflectionEquals(this, o); // この1行で OK に
}
// HashCodeBuilder … ハッシュ値生成
// hashCode の オーバーライドが簡単に記述可能に
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this); // この1行で OK に
}
ファイル操作
throws IOException
必須
ディレクトリ(パス)の指定方法は、絶対相対どちらでも可
// FileWriter … 書き込み操作
File Writer("パスとファイル名"); // 開く(上書き)
File Writer("パスとファイル名", 真偽値); // 開く(上書き or 追記)
void write("文字列"); // 書く(文字列)
void write(int); // 書く(1文字)
void flush(); // 強制書き込み
void close(); // 閉じる
// FileWriter インスタンス化 で ファイルを開く
// 指定パス、ファイル名が存在しない場合 新規作成される
// 第2引数が true … 末尾にデータを追記, false もしくは 省略 … 先頭からデータを上書き
FileWriter ○○○ = new FileWriter("c:/xxx.dat", true); // インスタンス化
○○○.flush(); // 閉じる前に記述し、強制で書き込ませる(必須)
// FileReader … 読み込み操作
FileReader("パスとファイル名"); // ファイルを開く
int read(); // 読む(1文字)
long skip(long); // 指定文字数読み飛ばす
close(); // 閉じる
FileReader ○○○ = new FileReader("c:/xxx.dat"); // インスタンス化
int i = ○○○.read(); // 1文字読む
while(i != -1){
// 処理内容
i = read();
}
// ファイル操作は必ず try-catch で閉じる
// Java7 から finally や close() や try-catchネスト が必要なくなった
try(FileWriter ○○○ = new FileWriter();) {
// ファイル操作処理
}catch(IOException e) {
// 例外の場合の処理
}
ストリーム
バッファリングして処理効率を上げるため、クラスbufferedInputStreamなど必須
必ずtry-catch文を使うこと(finallyではストリームを閉じること)
必ずcatchで「FileNotFoundException」と「IOException」を使うこと
FileInputStream fis = new FileInputStream("tmp/sample.txt"); // ファイル入力ストリーム
FileOutputStream fos = new FileOutputStream("tmp/sample.txt"); // ファイル出力ストリーム
// 基本は buffered を使う(処理効率向上のため)
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("tmp/sample.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("tmp/sample.txt"));
int tmp = bis.read(); // データ読み込み(バイトで)
bos.write(tmp); // データ書き込み(バイトで)
// Filter … ストリーム中の変換処理
// Filter は 複数連結して複数の変換処理も可
CipherOutputStream // 暗号化
OutputStreamWriter // 文字をバイトに変換
// 構文
CipherOutputStream xxx = new CipherOutputStream(ストリーム変数, algo); // 暗号化ストリームを生成し接続
xxx.write(値); // 暗号化しファイルに流す
// バッファリングフィルタ … データを溜め込みまとまった量になったところで出力
// ファイル操作では★必須★
BufferedReader // 文字情報
BufferedWriter // 文字情報
BufferedInputStream // バイト情報
BufferedOutputStream // バイト情報
readLine(); // 改行までの1行文のデータを String型 で返す
// 構文
BufferedReader xxx = new BufferedReader(ストリーム変数);
String line = null;
while((line = xxx.readLine()) != null) {
// 処理内容
}
fis.close(); // ストリームを閉じる
Java.nio.file … ファイル操作(高度)(Java7 から可)
Path ○○○ = Paths.get("パスとファイル名"); // ファイル or フォルダ 指定
// メソッド
public static long copy( from, to ); // コピー
public static long move( from, to ); // 移動(または改名)
public static void delete( path ); // 削除
public static void byte[] readAllBytes( path ); // 全て読み込む
public static List<String> readAllLines( path ); // 全行読み込む
public static boolean exists( path ); // 存在確認
public static boolean isDirectory( path ); // フォルダであるか確認
public static long size( path ); // ファイルサイズ取得