2017-02-08 3 views
-1

У меня есть LinkedHashMap, определяемый как таковой.Итерация по строке, векторная привязкаHashmap и печать полного вектора

LinkedHashMap<String,Vector<String>> hash = new LinkedHashMap<String,Vector<String>>(); 

Я пытаюсь выполнить итерацию через hashmap и распечатать результаты для каждой клавиши в текстовом файле. В настоящее время он возвращает только первое значение в каждом векторе.

 for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){ 
      printWriter.println(">NM_"+sID+"_"+entry.getKey()); 
      printWriter.println(entry.getValue()); 
     } 

Для примера пишет так:

NM_152486.2_rheMac3 
[MSKGILQVHPPICDCPGCRISSPV] 

Но на самом деле это должно быть что-то писать больше, как это:

NM_152486.2_rheMac3 
MSKGILQVHPPICDCPGCRISSPVVA-RVGRLFYMTGFPLAFPPPSAALRPPERELSLPHRPTSTSSSSSPYSG--PTPGCSSPKRENG--TP------------- 
+1

«Вектор» устарел с 1998 года. Сколько лет вы программируете на Java? –

ответ

0

Просто используйте для-каждого цикла

LinkedHashMap<String,Vector<String>> hash = new LinkedHashMap<String,Vector<String>>(); 

    Vector<String> v = new Vector<String>(); 
    v.add ("a"); 
    v.add ("b"); 

    hash.put("key", v); 

    for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){ 
     System.out.println(entry.getKey()); 

     for (String s : entry.getValue()) { 
      System.out.println(s); 
     } 
    } 

редактировать

Основываясь на ваш вопрос я не могу понять, где - приходят от, но вы можете форматировать по мере необходимости

0

Он отлично работает для меня (т.е. печатает все элементы вектора, разделенных запятыми, как это: [азбука, Защиту, ghijklmnop])

Я попытался имитируя вашу проблему с этим кодом:

 try { 
     PrintWriter printwriter = new PrintWriter(new File("d:\\a.txt")); 
     Vector<String> v = new Vector<String>(); 
     v.add("abc"); 
     v.add("def"); 
     v.add("ghijklmnop"); 
     Vector<String> v2 = new Vector<String>(); 
     v2.add("111"); 
     v2.add("222"); 
     v2.add("333"); 
     LinkedHashMap<String,Vector<String>> hash = new LinkedHashMap<>(); 
     hash.put("a1", v); 
     hash.put("b2",v2); 
     for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){ 
      printwriter.println(">NM_"+entry.getKey()); 
      printwriter.println(entry.getValue()); 
     } 
     printwriter.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


} 

содержимое файла:

NM_a1 [ABC, четкости, ghijklmnop]

NM_b2 [111, 222, 333]

Возможно ли, что привязанные значения washmap содержат векторы, которые имеют только 1 элемент?

Вы покажете остальную часть кода?

+0

Извините, я должен был включить все. Вместо этого я просто задал новый вопрос, который размещен здесь: http://stackoverflow.com/questions/42106956/getting-weird-output-from-linkedhashmap – bhffs

0

Одна вещь, которую вы должны смотреть на это с помощью вложенного цикла:

for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){ 
     printWriter.println(">NM_"+sID+"_"+entry.getKey()); 
     for (String nestedString : entry.getValue()) 
     { 
      printWriter.print(nestedString); 
      printWriter.print("-"); 
     } 
     printWriter.println(); 
    } 

Однако, я хотел бы ожидать вектор ToString() метод, который вызывается, когда вы назвали

printWriter.println(entry.getValue()); 

, чтобы написать список его значений, разделенных запятыми. (см. http://www.java2s.com/Tutorials/Java/java.util/Vector/Java_Vector_toString_.htm). Поскольку, похоже, это не так, может быть, где-то в вашем коде вы добавляете только одну строку в каждый вектор? Попробуйте поэкспериментировать с этим:

for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){ 
     printWriter.println(">NM_"+sID+"_"+entry.getKey()); 
     for (String nestedString : entry.getValue()) 
     { 
      printWriter.print(nestedString); 
      printWriter.print("-"); 
     } 
     printWriter.println(" " + entry.getValue().size()); 
    } 

, чтобы увидеть, если есть на самом деле только одна строка в каждом векторе.

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