HashMap a partir de 2 listas

1 resposta
K
Esse é meu código:
package cha06;

import java.util.*;

public class Student{
String name;
int studentID;

public Student(String name, int id){
this.name = name;
studentID = id;

}
public int getStdID(){
return this.studentID;
}


}
package cha06;

class Grades{

int studentID;
int grade;

public Grades(int grade, int id){
this.grade = grade;
studentID = id;

}
public int getGradeID(){
return this.studentID;
}
public int getGrade(){
return this.grade;
}
}
package cha06;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cha06.Student;


public class Files {

	public static void main(String[] args){
		List<Student> s = new ArrayList();
		List<Grades> g = new ArrayList();
		Map<Student,List>studentGrades = new HashMap();
		//Map must be: {Fred =[10, 2], Martha = [4, 8], John[3, 7], Paul =[6, 4]}
		Student s1 = new Student("Fred", 5);
		Student s2 = new Student("Martha", 3);
		Student s3 = new Student("John", 7);
		Student s4 = new Student("Paul", 8);
		s.add(s1);
		s.add(s2);
		s.add(s3);
		s.add(s4);	
		g.add(new Grades(10, 5));
		g.add(new Grades(2, 5));
		g.add(new Grades(4, 3));
		g.add(new Grades(3, 7));
		g.add(new Grades(7, 7));
		g.add(new Grades(6, 8));
		g.add(new Grades(8, 3));
		g.add(new Grades(4, 8));

		List gradesToStudent = new ArrayList();
                            //This is where im struggling
		            for(int i = 0 ; i<s.size();i++){
		            for(int j = 0;  j<s.size();j++){
		                Grades grades = g.get(i);
		                Student student = s.get(j);
		                if(student.getStdID() == grades.getGradeID()){
		                gradesToStudent.add(grades.getGrade());
		                
		                studentGrades.put(student, gradesToStudent);


		                }
		            }
		}
		System.out.println(studentGrades.toString());
	}
}

Oque eu quero fazer é que o meu Mapa tenha como Key o nome do student e como valores as notas que tem o mesmo studentID que esse nome
Meu loop ai em baixo tá resultando em um mapa, mas não leva em conta as ids:
Era pra ser: {Fred =[10, 2], Martha[4, 8] etc
Mas meu loop resulta em Fred =[10,2,4,7]
Onde está meu erro?

1 Resposta

A

Creio que o erro esta no seu primeiro for.

Não seria g.size() ao invés de s.size() ?

Criado 22 de maio de 2013
Ultima resposta 23 de mai. de 2013
Respostas 1
Participantes 2