無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

Arrays#deepEquals

Arrays#deepEquals()で配列要素の再帰的な比較ができます。

Object a = new Object();
Object b = new Object();
Object c = new Object();

// 配列
System.out.println( Arrays.deepEquals(
    new Object[] {a,b}, new Object[] {a,b} )); // true
System.out.println( Arrays.deepEquals(
    new Object[] {a,b}, new Object[] {a,c} )); // false

// 配列の配列
System.out.println( Arrays.deepEquals(
    new Object[][] {new Object[] {a,b}, new Object[] {a,b}},
    new Object[][] {new Object[] {a,b}, new Object[] {a,b}})); // true
System.out.println( Arrays.deepEquals(
    new Object[][] {new Object[] {a,b}, new Object[] {a,b}},
    new Object[][] {new Object[] {a,b}, new Object[] {a,c}})); // false

実行結果です。

true
false
true
false

以前に書いたオブジェクト比較ユーティリティの代わりに使えます。Object#equalsも↓のような感じでOK。

class Kitten {

    // フィールド
    private String name;
    private int age;

    public boolean equals ( Object obj ) {
        if ( obj == null ) { return false; }
        if ( obj instanceof Kitten ) {
            Object[] that = getValues((Kitten) obj);
            return Arrays.deepEquals(that, getValues(this));
        }
        return false;
    }
    public int hashCode () {
        return Arrays.deepHashCode(getValues(this));
    }

    // 比較するフィールドを返す関数
    // equals(),hashcode()の比較対象をここに集約する。
    private static Object[] getValues(Kitten v) {
        return new Object[] {
            // 比較するフィールド値をここに並べる。
            v.name,
            v.age
        };
    }
}