private Map<List<Object>, ConstraintMatch> createConstraintMatchMap( Collection<ConstraintMatchTotal> constraintMatchTotals) { Map<List<Object>, ConstraintMatch> constraintMatchMap = new LinkedHashMap<List<Object>, ConstraintMatch>(constraintMatchTotals.size() * 16); for (ConstraintMatchTotal constraintMatchTotal : constraintMatchTotals) { for (ConstraintMatch constraintMatch : constraintMatchTotal.getConstraintMatchSet()) { ConstraintMatch previousConstraintMatch = constraintMatchMap.put( Arrays.<Object>asList( constraintMatchTotal.getConstraintPackage(), constraintMatchTotal.getConstraintName(), constraintMatchTotal.getScoreLevel(), constraintMatch.getJustificationList(), constraintMatch.getWeightAsNumber()), constraintMatch); if (previousConstraintMatch != null) { throw new IllegalStateException( "Score corruption because the constraintMatch (" + constraintMatch + ") was added twice for constraintMatchTotal (" + constraintMatchTotal + ") without removal."); } } } return constraintMatchMap; }