2015-06-30 5 views
1

Я действительно застрял на этом. У меня уже есть этот код и вывод. Но я хочу улучшить и сделать его более сложным. Возможно ли это?Маска манипуляции Java HashMap ArrayList

String check = checkpoint1; 

boolean passcheckpoint1= false; 
int keyIndex = 0; 

Map<String,ArrayList> hashMap = new HashMap(); 

List<String> keys = new ArrayList<String>(); 

ArrayList<String> nextValue = new ArrayList(); 

while(it.hasNext()){ 
    line = it.nextLine(); 

    if (line.contains(check)) { 
     passcheckpoint1 = true; 
    } 
    else if (passcheckpoint1) { 
     ArrayList<String> value = new ArrayList(); 
     value.add(line); 
     hashMap.put(keys.get(keyIndex++), value); 
    } 
    else { 
     keys.add(line); 
    } 
} 

это - предыдущие данные моего текстового файла.

1 
2 
3 
4 
checkpoint1 
a 
b 
c 
d 

Выход:

{1 = [а], 2 = [Ь], 3 = [с], 4 = [d]}

и теперь это мои данные моего текстового файла.

1 
2 
3 
4 
checkpoint1 
a 
b 
c 
d 
checkpoint2 
5 
6 
7 
8 
checkpoint3 
e 
f 
g 
h 

Ожидаемые результаты:

{1 = [а], 2 = [Ь], 3 = [с], 4 = [d], 5 = [е, е , g, h], 6 = [e, f, g, h], 7 = [e, f, g, h], 8 = [e, f, g, h]}

Что я хочу сделать, поставить 5,6,7,8 в ключ из hashmap, как 1,2,3,4. Но теперь значение все равно. Я хочу поставить e, f, g, h в один arraylist (nextValue - ArrayList) и поставить его на значение 5,6,7,8

+0

что именно вы пытаетесь сделать? –

+2

Никогда не делай ничего такого сложного, что ты сам заблудишься! –

+0

Если итератор читает строку, содержащую контрольную точку2, то 5-6-7-8 будет храниться в ключе хэш-карты. тогда, когда итератор читает строку и содержит контрольную точку3, тогда e, f, g, h будут сохранены в arraylist и станут величиной 5-6-7-8. Я также думаю, что если я доберусь до контрольной точки2, возможно, сначала нужно прочитать e, f, g, h, а затем сохранить ее на arraylist, а затем, если контрольная точка дойдет3, тогда она будет хранить 5,6,7,8, а затем включить значение которого является arraylist – tuturyokgaming

ответ

1

Примечание: я не тестировал его.

Map<String, ArrayList<String>> hashMap = new HashMap(); 

int checkpoint = 0; 
int i = 0; 
List<String> keys1 = new ArrayList<String>(); 
List<String> keys2 = new ArrayList<String>(); 
List<String> keys3 = new ArrayList<String>(); 

while(it.hasNext()) { 
    line = it.nextLine(); 

    if (line.contains('checkpoint1')) { 
     checkpoint = 1; 
    } else if (line.contains('checkpoint2')) { 
     checkpoint = 2; 
    } else if (line.contains('checkpoint3')) { 
     checkpoint = 3; 
    } else { 
     switch (checkpoint) { 
      case 0: 
        keys1.add(line); 
        break; 
      case 1: 
        List<String> values = new ArrayList<String>(); 
        values.add(line); 
        hashMap.put(keys1.get(i++),values); 
        break; 
      case 2: 
        keys2.add(line); 
        break; 
      case 3: 
        keys3.add(line); 
        break; 
     } 
    } 
} 

for (String k: keys2){ 
    hashMap.put(k,keys3); 
} 
+0

Удивительный! Это работает! Спасибо, кучи! Я забыл об инвалидной коляске! – tuturyokgaming

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