2017-01-30 2 views
1

Я пытался создать составной ключ типа и имя как возвращение строкиJava - Ведение 2 ключа для одного значения (TreeMap)

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

и хотели бы сохранить его в TreeMap как Objectname и OBJECTTYPE потребности быть одним ключом, а вторая строка, то есть значение должно быть указано пользователем. Значение типа String

Каковы ваши предложения по этому вопросу?

Это где я буду хранить 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>.

Другой способ создать класс для ключа:

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 
} 

Теперь ваша карта должна быть: Map<Key, String>, и я считаю, что это должно быть более гибким.

+1

Вы также должны указать метод hashCode() для класса Key, который создает хэш-код из objectName и objectType. – Ridcully

+0

Справа. Оставил это для реализации. 'equals()' и 'hashcode()' являются обязательными. – xploreraj

0

Вы можете соединить два потенциальных ключей со строкой как "@@-#-#[email protected]@" или любой другой строки, которые вы уверены, что там не будет в ваших данных, и сделайте эту конкатенированную строку как «ключ» вашей карты. В будущем, если вам нужно извлечь две ключевые строки из «ключа» карты, просто разделите ключ карты, используя строку "@@-#-#[email protected]@".

0

Поскольку TreeMap в конечном счете является только картой, он будет иметь ту же структуру, что и ключ и ценность. Единственное, что отличается от этого: Карта деревьев гарантирует, что ее элементы будут отсортированы по возрастающему порядку клавиш. Вы хотите, чтобы две строки были составными, тогда вы можете добавить любой разделитель между этими двумя строками, а затем добавить его в качестве ключа. Например, если мы используем # как разделитель, это будет 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

если я храню закрытый статический окончательный String SEPERATOR = "$$"; private String getCompositekey (String key1, String key2) { return key1 + SEPERATOR + key2; } его в другом пакете и хотите использовать getCompositKey в другом классе, как мне это сделать? –

+0

Этот пример служит только для иллюстрации использования. Вы можете использовать модификаторы по мере необходимости. Если он находится в одном пакете, сохраните его в закрытом режиме, чтобы доступ к нему был общедоступным. –

Смежные вопросы