В трех foreach, реализованных с использованием Map.Entry >>, когда я выполняю итерацию на второй карте, в приведенном ниже коде у меня есть исключение NullPointerException. Я не могу понять, в чем причина. Для репликации вам нужно в папке проекта создать папку «inputData», которая содержит файл «data.txt» с некоторыми значениями, как показано ниже (я просто приведу несколько примеров):
Apahida,15,199,2017-09-03
Apahida,15,249,2017-09-03
Apahida,15,299,2017-09-03
Floresti,7,100,2017-09-01
Floresti,7,250,2017-09-01
Turda,29,149,2017-09-01
Turda,29,199,2017-09-02
После этого, когда я запускаю свой метод main из класса MainApp (см. Ниже), у меня появляется «Исключение в потоке» main «java.lang.NullPointerException» в строке с кодом, указанным с комментарием ниже. Можете ли вы выяснить, где проблема и предложить мне решение, пожалуйста?
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
public class MainApp {
public static void main(String[] args) {
List<Package> dataPackage = new ArrayList<>();
File file = new File("inputData/data.txt");
List<String> listInputData = null;
try {
listInputData = Files.readAllLines(Paths.get(file.getPath()));
} catch (IOException e) {
e.printStackTrace();
}
for (String string : listInputData) {
String[] split = string.split(",");
Package aPackage = new Package(split[0], Double.parseDouble(split[1]), Double.parseDouble(split[2]), split[3]);
dataPackage.add(aPackage);
}
Map<String, Map<Date, List<Package>>> packagesGroupedBasedOnTargetLocationAndDeliveryDate = new HashMap<>();
for (Package aPackage : dataPackage) {
String targetLocationOfPackage = aPackage.getTargetLocation();
boolean targetLocationExistInMap = false;
for (Map.Entry<String, Map<Date, List<Package>>> targetLocationInMap : packagesGroupedBasedOnTargetLocationAndDeliveryDate.entrySet()
) {
if (targetLocationInMap.getKey().equals(targetLocationOfPackage)) {
targetLocationExistInMap = true;
Map<Date, List<Package>> packagesGroupedBasedOnDeliveryDate =
packagesGroupedBasedOnTargetLocationAndDeliveryDate.get(targetLocationOfPackage);
boolean deliveryDateExistInMap = false;
Date deliveryDateOfPackage = aPackage.getDeliveryDate();
for (Map.Entry<Date, List<Package>> deliveryDateInMap : packagesGroupedBasedOnDeliveryDate.entrySet()) {
if (deliveryDateInMap.getKey().equals(deliveryDateOfPackage)) {
deliveryDateExistInMap = true;
packagesGroupedBasedOnTargetLocationAndDeliveryDate
.get(targetLocationOfPackage)
.get(deliveryDateOfPackage)
.add(aPackage);
}
}
if (!deliveryDateExistInMap) {
List<Package> newListOfPackageByDeliveryDate = new ArrayList<>();
newListOfPackageByDeliveryDate.add(aPackage);
packagesGroupedBasedOnTargetLocationAndDeliveryDate
.get(targetLocationOfPackage)
.put(deliveryDateOfPackage, newListOfPackageByDeliveryDate);
}
System.out.println();
System.out.println(packagesGroupedBasedOnTargetLocationAndDeliveryDate.toString());
System.out.println();
}
}
if (!targetLocationExistInMap) {
List<Package> newListOfPackageByDeliveryDate = new ArrayList<>();
newListOfPackageByDeliveryDate.add(aPackage);
Map<Date, List<Package>> newMapOfPackageByDeliveryDate = new HashMap<>();
newMapOfPackageByDeliveryDate.put(aPackage.getDeliveryDate(), newListOfPackageByDeliveryDate);
packagesGroupedBasedOnTargetLocationAndDeliveryDate
.put(targetLocationOfPackage, newMapOfPackageByDeliveryDate);
}
}
for (Map.Entry<String, Map<Date, List<Package>>> targetLocationSTRING :
packagesGroupedBasedOnTargetLocationAndDeliveryDate.entrySet()) {
for (Map.Entry<Date, List<Package>> deliveryDateDATE :
packagesGroupedBasedOnTargetLocationAndDeliveryDate
.get(targetLocationSTRING).entrySet()) { /// ***EXCEPTION APPEAR HERE, WHY?***
for (Package aPackage :
packagesGroupedBasedOnTargetLocationAndDeliveryDate
.get(targetLocationSTRING).get(deliveryDateDATE)) {
System.out.println(aPackage.toString());
}
}
}
}
}