我需要創建一個具有兩個字符串鍵的映射。地圖中兩個字符串的鍵?
例如讓說
key = Name & Target
value = Permission(boolean)
我需要創建一個特殊的對象或者是在有任何的元組構建的Java /谷歌集合或共享集合或共享郎?
我需要創建一個具有兩個字符串鍵的映射。地圖中兩個字符串的鍵?
例如讓說
key = Name & Target
value = Permission(boolean)
我需要創建一個特殊的對象或者是在有任何的元組構建的Java /谷歌集合或共享集合或共享郎?
的Apache Commons Collections中有MultiKey:
map.put(new MultiKey(key1, key2), value);
multiKeyMap.put(key1, key2, value);
這是你在找什麼?
String name = ...
String target = ...
String key = name + "_" + target;
map.put(key, value)
另外,您可以創建一個容納兩個字符串對象和覆蓋hashCode
和equals
例程比簡單的字符串連接一個更好的辦法來區分。
這可能不是最好的解決方案,name ='ab'和target ='c'將指向與name ='a'和target ='bc'相同的條目。不完美的解決方案,但這些字符串可以由一些不尋常的字符串分隔 – 2011-02-17 09:27:29
爲什麼不創建List
從這兩個字符串,並使用作爲Map
中的一個鍵。它會使代碼更具可讀性。
請發表一個建議的解決方案的工作示例,它可以得心應手的進一步參考 – Deepak 2011-02-18 15:29:34
你能貓的串在一起,但我個人的偏好是創建一個價值不大的對象:
public class NameTarget {
private final String name;
private final String target;
public NameTarget(String name, String target){
this.name = name;
this.target = target;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((target == null) ? 0 : target.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
NameTarget other = (NameTarget) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (target == null) {
if (other.target != null)
return false;
} else if (!target.equals(other.target))
return false;
return true;
}
// add getters here
}
花了大約30秒鐘來產生d o在eclipse中,它爲長期運行提供了更安全,更乾淨的代碼。
你可以和我在過去創建了一個Pair
樣式turple但我開始喜歡這種事情的命名不可變值類型。
可以確認30秒 - 你手動編寫一個包名,一個類名和兩個屬性,剩下的就是自動生成的eclipse(構造函數,getter,setter,hashcode的實現,toString和等於) – 2011-02-17 09:36:37
一個很好的發現,thx。 – IAdapter 2011-02-17 09:41:59