2016-11-28 119 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

相关问题