Java - 为一个值保留 2 个键 (TreeMap)

Java - Keeping 2 keys for one value (TreeMap)

我正在尝试创建类型和名称都为 return 字符串

的复合键
public String getObjectName() {
    return objectName;
}
public String getObjectType() {
    return objectType;
}

并想将其存储在 Treemap 中 objectName 和 objectType 都需要是单个键,第二个 String 即值需要是用户指定的 String 类型的值

你对此有何建议?

这是我要存储 TreeMap 的地方

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

您可以将两个预期键与 "@@-#-#-@@" 之类的字符串或您确定不会出现在数据中的任何其他字符串连接起来,并将此连接后的字符串作为 'key'你的地图。 将来如果您需要从地图的 'key' 中检索两个键字符串,只需使用 "@@-#-#-@@" 字符串拆分地图的键即可。

由于 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);
    }
}

一种方法是按照其他答案所示进行连接。然后您可以将它们用作键,并在值中放置任何用户输入。 这导致 Map<String, String> 类型。

另一种方法是为键创建一个 class:

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> 我相信这应该更灵活。