2013-11-27 4 views
2

У меня есть эта карта, которая хранит Карта объектов:Поиск значения в Список объектов

Map<String, ActiveConnections> cache = new LinkedHashMap<>(); 

public class ActiveConnections 
    { 

     private int one; 
     private int two; 
     private int three; 

     public ActiveConnections(int one, int two, int three) 
     { 
      this.one = one; 
      this.two = two; 
      this.three = three; 
     } 

     public int getOne() 
     { 
      return one; 
     } 

     public void setOne(int one) 
     { 
      this.one = one; 
     } 

     public int getTwo() 
     { 
      return two; 
     } 

     public void setTwo(int two) 
     { 
      this.two = two; 
     } 

     public int getThree() 
     { 
      return three; 
     } 

     public void setThree(int three) 
     { 
      this.three = three; 
     } 

    } 

Как я могу создать петлю, которая ищет значение в Map объектов. Например, я хочу получить все значения two = 4.

+0

Выполнение чего-то подобного превосходит цель использования карты ... – alfasin

+0

Я не понимаю? –

+0

Карта была сделана так, что вы * не должны * перебирать структуру данных, когда хотите найти элемент. Карта работает в (теоретической) O (1). Если вы планируете итерировать все элементы, которые вы могли бы использовать, используйте список. – alfasin

ответ

1

Как я писал в комментарии выше - с помощью карты для перебора элементов бьет цель с помощью карты, но если другие ограничения, которые не были приведены здесь, и вы должны использовать карту, я бы реализовать новый метод поиска в классе ActiveConnections:

public int search(int lookFor){ 
     int res = -1;//not found 
     if(lookFor == one){ 
      res = one; 
     } 
     else if(lookFor == two){ 
      res = two; 
     } 
     else if(lookFor == three){ 
      res = three; 
     } 
     return res;   
    } 

, а затем, для каждого элемента (активное соединение) - си просто вызовите поиск и подтвердите, что результат не -1 (или какой-либо другой «код ошибки», который вы предпочитаете).

2

Попробуйте это, он перебирает все пары ключ/значение на карте, ища те со значением two == 4 в своем ActiveConnections. Найдя, вы можете решить, что делать с ключом или значением в entry, это зависит от вас.

for (Map.Entry<String, ActiveConnections> entry : cache.entrySet()) { 
    if (entry.getValue().getTwo() == 4) { 
     // we found one, do something with the entry 
    } 
} 
0

Вы можете просто перебирать значения ...

for (ActiveConnections value : cache.values()) { 
    if (value.getTwo() == 4) { 
     //logic 
    } 
} 
Смежные вопросы