2016-11-28 3 views
1

Ich habe eine Karte:Wie erhält man Wert von Map durch ein Schlüsselfeld?

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

Map<MyKey, String> myMap; 

Wie Wert von myMap von MyKey.id Feld bekommen?

+0

werden Sie entweder iterieren alle Einträge eine Übereinstimmung zu finden oder eine neue Map zu bauen, wo der Schlüssel MyKey.id wird – Eran

+2

In 'O (1)', kann man nicht. Es sei denn, Ihr 'MyKey' implementiert' equals' und 'hashCode' basierend auf' MyKey.id'; In diesem Fall können Sie 'get' mit einem' MyKey' mit der entsprechenden 'id' aufrufen. –

+0

Sie müssen die Methoden 'equals' und' hashCode' überschreiben. –

Antwort

1

Die Antwort finden Sie in C#. Ich denke, wir können dasselbe mit einem Linq-Ausdruck erreichen. Bitte finden Sie den folgenden Beispielcode, der Ihnen hoffentlich hilft.

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

Ja, in java8 sieht das so aus: 'Map myMap; Optional myKeyOptional = myMap.keySet(). Stream(). Filter (myKey-> myKey.getId() == someId) .findFirst(); if (myKeyOptional.isPresent()) { Name = myMap.get (myKeyOptional.get()); } ' – Paul

+0

Ok glücklich zu wissen, dass es dir geholfen hat ... Danke – VipinKV

Verwandte Themen