2017-01-30 23 views
1

(TreeMapの)一つの値のための2つのキーを維持し、名前の両方の戻り文字列をJavaの - 私はタイプの複合キーを作成しようとしていた

public String getObjectName() { 
    return objectName; 
} 
public String getObjectType() { 
    return objectType; 
} 

とツリーマップ の両方のobjectNameとobjectTypeのニーズを、それを保存したいと思います単一のキーで2番目のString、つまり値はユーザーが指定する必要があります。String型の値

これについてのご意見はありますか?

私はあなたが"@@-#-#[email protected]@"のような文字列またはあなたが確信している他の文字列を持つ2つの将来の鍵は、あなたのデータには存在しないだろう連結することができますTreeMapの

public static void setDomainDocumentationMap(Map<String, String> domainDocumentationMap) { 
    MMTUtil.domainDocumentationMap = domainDocumentationMap; 
+0

'objectName'と' objecttype'からキーを構築するには、値を一緒に連結して、 'objectName'または' objectType'には出現しないセパレータで区切ります。たとえば、 'objectName'が「obName」で、「objecttype」が「obType」である場合、そのキーは「obName-obType」である可能性があります。 –

答えて

3

一つの方法は、他の回答に示すように連結することです。次に、それらをキーとして使用することができ、値では、ユーザー入力があればそれを入れます。 これはMap<String, String>タイプにつながります。

もう一つの方法は、キーのクラスを作成することです:Map<Key, String>と私は、これは、より柔軟であるべきと考えている:

class Key{ 
    private String objectName; 
    private String objectType; 

    //TODO write setters here 

    public String getObjectName(){ 
     return objectName; 
    } 

    public String getObjectType(){ 
     return objectType; 
    } 

    public String toString(){ 
     return objectName + ":separator:" + objectType; 
    } 

    //TODO implement hashcode and equals method 
} 

今、あなたのマップがなければなりません。

+1

また、ObjectNameとobjectTypeからハッシュコードを作成するKeyクラスにhashCode()メソッドを提供する必要があります。 – Ridcully

+0

右。それを実装者に任せてください。 'equals()'と 'hashcode()'は必須です。 – xploreraj

0

つもり店だところです、この連結された文字列をマップの「キー」として作成します。 将来、マップの「キー」から2つのキーストリングを取得する必要がある場合は、"@@-#-#[email protected]@"ストリングを使用して地図のキーを分割するだけです。

0

TreeMapは最終的にマップのみであるため、キーと値の構造が同じになります。 異なるものだけです:ツリーマップは、要素が昇順のキー順でソートされることを保証します。 2つの文字列を複合キーとして使用する場合は、これらの2つの文字列の間にセパレータを追加してキーとして追加できます。 たとえば、#を区切り記号として使用すると、string1#string2がキーとなり、それに対して値が格納されます。

コード例:

public class Test{ 

    private static final String SEPERATOR ="$$" ; 

    private String getCompositekey(String key1, String key2) 
    { 
    return key1+SEPERATOR+key2; 
    } 

    public static void main(String[] args){ 
    Map<String,Object> t = new TreeMap<String,Object>(); 
    Test test = new Test(); 
    t.put(test.getCompositekey(test.getObjectName(),test.getObjectType()),VALUEGOESHERE); 
    } 
} 
+0

私が格納している場合 プライベートstatic final String SEPERATOR = "$$"; プライベート文字列getCompositekey(String key1、String key2) { return key1 + SEPERATOR + key2; } 他のパッケージにあり、別のクラスでgetCompositKeyを使用したいのですがどうすればいいですか? –

+0

この例は、使用方法を示すためのものです。必要に応じて修飾語を使用できます。同じパッケージに含まれている場合は、それを非公開にして、すべてのパッケージへのアクセスを公開します。 –

関連する問題