2017-05-04 14 views
1
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.HashMap; 
import java.util.List; 
import javax.swing.JOptionPane; 


public class HashMapDemo { 
public static double runProcess; 
public static int ID = 0; 
public static void processHashMap() { 
    HashMap < Integer, ArrayList <String>> students = new HashMap < >(); 
    List <String> arr = new ArrayList < > (100); 
    int x = 0; 
    while (ID != -1) { 
    String uData = JOptionPane.showInputDialog("Please enter your Student ID and Course Number (Seperated by a space) or enter -1 to view list: "); 
    String[] splitter = uData.split(" "); 
    ID = Integer.parseInt(splitter[0]); 
    arr.add(0, splitter[1]); 
    students.put(ID, (ArrayList <String>) arr); 
    x++; 
    } 
    System.out.println(Arrays.asList(students)); 

} 
public static void main(String[] args) { 
    processHashMap(); 
} 

} 

Ausgang ist: [{-1 = [Test3, Test2, Test1, Test], 10 = [Test3, Test2, Test1, Test], 11 = [Test3, Test2, Test1, Test] }]Java HashMap Arraylist

Ich versuche, es für jede ID bezeichnet werden, so dass wenn jemand ID "10 Test" "10 Test2" "100 Test3" nur 10 wird 10 = [Test2, Test] und 100 = [Test3]

+2

Erstellen Sie eine neue ArrayList für jeden Schüler innerhalb der Schleife. Es sieht so aus, als ob du die gleiche Arraylist wiederverwenden würdest. – yogidilip

+0

das ist so ziemlich die Lösung für Sie –

Antwort

2

Sie müssen die vorhandenen ArrayList mit dem ID vom HashMap und dann add das neue Element, um es zu erhalten, wie unten (folgen Sie den Kommentaren) gezeigt:

String[] splitter = uData.split(" "); 
ID = Integer.parseInt(splitter[0]); 
ArrayList<String> studentsList = students.get(ID);//get the existing list from Map 
if(studentsList == null) {//if no list for the ID, then create one 
    studentsList= new ArrayList<>(); 
} 
studentsList.add(0, splitter[1]);//add to list 
students.put(ID, studentsList);//put the list inside map 
+0

Danke, das hat funktioniert. –