0

GUIでアカウントを表示する場合、プライマリアカウントを表示する必要があります(セカンダリアカウントの場合)。プライマリアカウントごとに複数のセカンダリアカウントが存在する可能性があります。

プライマリアカウントからセカンダリアカウントの情報をHashMapに保存しようとしています。なぜなら、それは後で取得する必要があるからです。

保存中に、セカンダリアカウントの指示も保存する必要があります。したがって、プライマリアカウントとしてキーを使用して2つのオブジェクトを保存する必要があります。

1) Secondary Account
2) Secondary Instruction.

アカウントオブジェクトと命令オブジェクトのequalsとハッシュコードがオーバーライドされています。

プライマリアカウントのハッシュコードをキーとして使用し、値をオブジェクトのリストとして使用しようとしています[2]

-初期化

private static final Map<Integer, ArrayList<Object[]>> primaryToSecondaryAcct = new ConcurrentHashMap<Integer, ArrayList<Object[]>>();

-値を置く

final Object[] acctInstr = new Object[2];
acctInstr[0] = acct;
acctInstr[1] = instr;
if(primaryToSecondaryAcct.get(getExistingAccount().hashCode()) != null) {
    primaryToSecondaryAcct.get(getExistingAccount().hashCode()).add(acctInstr);
} else {
    final ArrayList<Object[]> acctInstrList = new ArrayList<Object[]>();
    acctInstrList.add(acctInstr);
    primaryToSecondaryAcct.put(getExistingAccount().hashCode(), acctInstrList);
}

これが正しいかどうか、そしてそれを行うためのより良い方法があるかどうか疑問に思っています。提案してもらえますか?

4

4 に答える 4

5

それ以外の:

Map<Integer, ArrayList<Object[]>>

なぜ持っていないのですか

Map<Account, SecondaryInfo>

現時点では、キーに対してコレクションを保存しており、それを管理する必要があり、Map. 適切な抽象化を作成し、それに委任する方がはるかに優れていると思います。その抽象化は、検証、反復などを 1 か所で処理します。アクセスするたびに心配する必要はありませんMap

覚えておいてください - OO は、オブジェクトに情報を求めて自分で行うのではなく、オブジェクトに何かを行うように指示することです。

Integerアカウントの表現を特定のAccountオブジェクトに置き換えます。そうしないと、さまざまな型を表す多数の整数を管理する必要があり、これらを混同するのは非常に簡単です。それらを入力すると (たとえ簡単なクラスを使用しても)、自動化されたツールを使用して簡単にリファクタリングし、命名規則に頼ることなくタイプを簡単に決定できることを意味します。

于 2012-09-11T16:06:43.410 に答える
3

Accountハッシュコードは 2 つの異なるオブジェクトで同じになる可能性があるため、キーとして使用することをお勧めします。

于 2012-09-11T16:15:16.613 に答える
2

Primaryとアカウントの両方に、Secondary次のようなクラスがある場合:

public class PrimaryAccount 
{
    int id;
    private List<SecondaryAccount> secondaryAccounts;   
}

public class SecondaryAccount
{
    int id;
    private List<String> instructions;
    PrimaryAccount primaryAccount;
}

それなら、もしかしたら必要ないかもしれませんHashMapHashmapただし、 Accounts: をすばやく検索するために、 HashMap<Integer,PrimaryAccoount>アカウント ID とプライマリ アカウントを保存する場所を維持したい場合があります。

これにより、実装がよりクリーンになります。PrimaryおよびSecondaryアカウントのクラスを作成する必要があります。

于 2012-09-11T16:34:16.337 に答える
2

最初に必要なのは、 GoogleMultiMapGuavaライブラリにある です。これは に似ておりMap<K, Collection<V>>、キーを複数の値にマップするため、再発明する必要はありません。

次に、Object[]独自のカスタム クラスに置き換えます。

public class SecondaryInformation {
    private SecondaryAccount secondaryAccount;
    private SecondaryInstruction secondaryInstruction;

    // Constructors, getters, setters, etc.
}

だからあなたはMultiMap<Integer, SecondaryInformation>. に関するwiki 情報を次に示しますMultiMap

于 2012-09-11T16:13:37.630 に答える