Dopiero zaczynam programowanie w Javie i mam zapewne dość trywialne pytanie. Chcę zmapować datę urodzin do grupy osób urodzonych tego dnia:
Map<Date, ArrayList<Person>> dateToPersons;
Jeżeli danej daty urodzenia nie ma jeszcze w mapie, to dodaję wszystkie osoby z taką datą do tejże mapy:
public PersonDatabase(List<Person> myList) {
this.myList = myList;
dateToPersons = new TreeMap<Date, ArrayList<Person>>();
for(int i = 0 ; i < myList.size() ; ++i)
{
if(!dateToPersons.containsKey(myList.get(i).getBirthdate()))
{
ArrayList<Person> currentList = new ArrayList<>();
for(int j = 0 ; j < myList.size() ; ++j)
{
if(myList.get(i).getBirthdate().compareTo(myList.get(j).getBirthdate()) == 0)
{
currentList.add(myList.get(j));
}
}
dateToPersons.put(myList.get(i).getBirthdate(), currentList);
}
}
}
Problem leży zapewne w tej linijce:
dateToPersons.put(myList.get(i).getBirthdate(), currentList);
Dodaje ona konkretny klucz (object reference) do tej mapy, a kiedy później chcę pobrać grupę osób urodzonych danego dnia:
public List<Person> bornOnDay(Date date) {
return dateToPersons.get(date);
}
//...
System.out.println("\nPeople born on the 7th sept. 1995:");
for(Person p : myDatabase.bornOnDay(new Date(1995, 9, 7)))
{
System.out.println(p);
}
(pomijając, że używam konstruktora oznaczonego jako deprecated) to muszę siłą rzeczy stworzyć nowy obiekt typu Date, i dlatego dostaję nullpointer exception. Daty mają takie same wartości ale inne adresy w JVM jak mniemam. Ktoś wie jak temu zaradzić ^^ ?