2016-11-28 77 views
1

我有地圖:如何通過一個密鑰字段從Map中獲取值?

public class MyKey { 
    ... 
    private long id; 
    ... 
} 

Map<MyKey, String> myMap; 

如何通過MyKey.id場得到myMap價值?

+0

你要麼必須遍歷所有條目找到匹配或建立一個新的地圖,關鍵是MyKey.id – Eran

+2

在'O(1)',你不能。除非你的'MyKey'基於'MyKey.id'實現'equals'和'hashCode';在這種情況下,你可以用'MyKey'和相應的'id'調用'get'。 –

+0

您必須重寫'equals'和'hashCode'方法。 –

回答

1

請在C#中找到答覆。我認爲我們可以使用Linq表達式實現相同的功能。請在下面找到示例代碼,希望它會有所幫助。

public class MyKey 
    { 
     public long ID { get; set; } 
    } 

    static void Main(string[] args) 
    { 
     Dictionary<MyKey, String> myMap = new Dictionary<MyKey, string>(); 
     myMap.Add(new MyKey() { ID = 100 }, "One"); 
     myMap.Add(new MyKey() { ID = 200 }, "Two"); 
     myMap.Add(new MyKey() { ID = 300 }, "Three"); 

     long searchKey = 200; 
     string value = myMap[myMap.Keys.FirstOrDefault(x => x.ID == searchKey)]; 
    } 
+0

是的,在java8中它看起來像這樣:'Map myMap; 可選 myKeyOptional = myMap.keySet()。stream()。filter(myKey-> myKey.getId()== someId).findFirst(); (myKeyOptional.isPresent()){ name = myMap.get(myKeyOptional.get()); }' – Paul

+0

好高興知道它幫助你...謝謝 – VipinKV

相關問題