2016-11-28 1 views
1

У меня есть карта:Как получить значение с карты одним полем ключа?

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

Map<MyKey, String> myMap; 

Как получить значение из myMap на MyKey.id поле?

+0

Вы должны либо перебрать все записи, чтобы найти совпадение или построить новую карту, где ключ MyKey.id – Eran

+2

В 'O (1)', вы не можете. Если ваш 'MyKey' не реализует' equals' и 'hashCode' на основе' MyKey.id'; в этом случае вы можете просто вызвать 'get' с' MyKey' с соответствующим 'id'. –

+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(); if (myKeyOptional.isPresent()) { name = myMap.get (myKeyOptional.get()); } ' – Paul

+0

Хорошо, что это вам помогло ... Спасибо – VipinKV

Смежные вопросы