HashMapпроблема toString - PullRequest
       13

HashMapпроблема toString

0 голосов
/ 02 апреля 2011

У меня есть карта типа HashMap.

Я пытаюсь перебрать карту и для каждой записи, для которой булев флаг установлен в true, я пытаюсь напечатать соответствующее значение ключа.

Я могу этого добиться.Однако вместо того, чтобы печатать строковые «ключевые» значения, он печатает строковые объекты.Я попытался привести его, используя функцию .toString ().Ничто не решило это.

Любая помощь будет принята с благодарностью.

Спасибо, S.

Ответы [ 6 ]

5 голосов
/ 02 апреля 2011

Вы хотите выполнить итерацию по элементу карты. Набор:

Set< Map.Entry<String, Boolean> > es = map.entrySet();

Это набор, поэтому вы можете выполнить итерацию по нему:

for( Map.Entry<String, Boolean> v : es ) {
   if( v.getValue() ) { // auto-unboxing
       System.out.println(v.getKey());
   }
}

Упрощение:

for( Map.Entry<String, Boolean> v : map.entrySet() ) {
   if( v.getValue() ) {
       System.out.println(v.getKey());
   }
}
2 голосов
/ 02 апреля 2011

Вы, вероятно, хотите что-то вроде этого:

for(String key : map.keySet()){
  if(map.get(key)){
    System.out.println(key);
  }
}
1 голос
/ 02 апреля 2011

Ваше продолжение предполагает, что значения в вашей карте не относятся к типу String и не относятся к типу, который переопределил toString, поэтому при вызове toString вы получаете значение типа "com.f5.lunaui.emproto .reports.Device_Sri @ 334003" .

В Device_Sri вы должны переопределить метод toString, чтобы получить желаемую строку:

@Override
public String toString() {
    return "em_device90-36";
}

Конечно, вы, вероятно, захотите вычислить значение "em_device90-36" из полей класса Device_Sri.

1 голос
/ 02 апреля 2011

Это должно работать:

Map<String, Boolean> myMap = new HashMap<String, Boolean>();
myMap.put("one", true);
myMap.put("second", false);

for (String key : myMap.keySet()) {
  if (myMap.get(key)) {
    System.out.println(key + " --> " + myMap.get(key));
  }
}
0 голосов
/ 02 апреля 2011

Чтобы добавить к другим ответам, вы получите исключение нулевого указателя, если значение равно нулю.

if (e.getValue()) { ... }

Это потому, что значение равно Boolean и будет распаковано в boolean.Это эквивалентно e.getValue().booleanValue().

Если вы хотите защититься от значения null, используйте

if (Boolean.TRUE.equals(e.getValue()) { ... }
0 голосов
/ 02 апреля 2011
private Map<String, Boolean> deviceChecked = new HashMap<String, Boolean>();
deviceChecked = checkMap;

Set entry = deviceChecked.entrySet();
    Iterator i = entry.iterator();
while(i.hasNext()){
    Map.Entry ent = (Map.Entry)i.next();
    if(ent.getValue()){
        result = result + (String)ent.getKey() + ", ";
    }
}
System.out.println("result is " +result);
return result;

Я пытаюсь напечатать ключ только в том случае, если соответствующее логическое значение равно true.Что-то вроде кода выше.При этом результирующее значение не содержит строку, и оно в свою очередь печатает объект.Я должен получить значение, которое будет напечатано как «em-device90-36».Но вместо этого я получил это напечатанное

com.f5.lunaui.emproto.reports.Device_Sri@334003

...