private Job getWorst(Collection<VehicleRoute> copied) { Job worst = null; double bestSavings = Double.MIN_VALUE; for (VehicleRoute route : copied) { if (route.isEmpty()) continue; Map<Job, Double> savingsMap = new HashMap<Job, Double>(); TourActivity actBefore = route.getStart(); TourActivity actToEval = null; for (TourActivity act : route.getActivities()) { if (actToEval == null) { actToEval = act; continue; } double savings = savings(route, actBefore, actToEval, act); Job job = ((TourActivity.JobActivity) actToEval).getJob(); if (!savingsMap.containsKey(job)) { savingsMap.put(job, savings); } else { double s = savingsMap.get(job); savingsMap.put(job, s + savings); } actBefore = actToEval; actToEval = act; } double savings = savings(route, actBefore, actToEval, route.getEnd()); Job job = ((TourActivity.JobActivity) actToEval).getJob(); if (!savingsMap.containsKey(job)) { savingsMap.put(job, savings); } else { double s = savingsMap.get(job); savingsMap.put(job, s + savings); } // getCounts best for (Job j : savingsMap.keySet()) { if (savingsMap.get(j) > bestSavings) { bestSavings = savingsMap.get(j); worst = j; } } } return worst; }