class TaskAssigningSolutionFileIO extends AbstractJsonSolutionFileIO<TaskAssigningSolution> {

    public TaskAssigningSolutionFileIO() {
        super(TaskAssigningSolution.class);
    }

    @Override
    public TaskAssigningSolution read(File inputSolutionFile) {<FILL_FUNCTION_BODY>}

}

        TaskAssigningSolution taskAssigningSolution = super.read(inputSolutionFile);

        var customersById = taskAssigningSolution.getCustomerList().stream()
                .collect(Collectors.toMap(Customer::getId, Function.identity()));
        /*
         * Replace the duplicate customer instances in the affinityMap by references to instances from
         * the customerList.
         */
        for (Employee employee : taskAssigningSolution.getEmployeeList()) {
            var newTravelDistanceMap = deduplicateMap(employee.getAffinityMap(),
                    customersById, Customer::getId);
            employee.setAffinityMap(newTravelDistanceMap);
        }
        return taskAssigningSolution;
    
<methods>public void <init>(Class<org.optaplanner.examples.taskassigning.domain.TaskAssigningSolution>) ,public void <init>(Class<org.optaplanner.examples.taskassigning.domain.TaskAssigningSolution>, ObjectMapper) <variables>