studentsClassifications.put(classification, students.subList(groundLimitIndex, limitIndex));
studentsClassifications.put(classification, otherStudents.subList(groundLimitIndex, limitIndex));
    private HashMap<Character, List<Student>> splitStudentsByClassification(Integer[] limits,            List<Student> students, String field, Transformer fieldGetter, Closure fieldSetter) {        HashMap<Character, List<Student>> studentsClassifications = new HashMap<Character, List<Student>>(                limits.length);        Collections.sort(students, new BeanComparator(field));                List<Student> weakStudents = new ArrayList<Student>();        for (Student student : students) {            if(((Double) fieldGetter.transform(student)) == 0.0){                weakStudents.add(student);                fieldSetter.execute(new GenericPair<Student, Character>(student, 'F'));            }        }        studentsClassifications.put('F', weakStudents);        students.removeAll(weakStudents);        char classification = 'A';        ListIterator<Student> studentsIter = students.listIterator(students.size());        for (int i = limits.length - 1; i > 0; i--) {            int groundLimitIndex = (int) Math.ceil(students.size() * (limits[i - 1] / 100.0));            Double groundLimitValue = (Double) fieldGetter.transform(students.get(groundLimitIndex));                        Double  maxValue = (Double) fieldGetter.transform(students.get(students.size() - 1));            if(maxValue.equals(groundLimitValue)){                groundLimitValue -= 0.0000000001;            }                        int limitIndex = studentsIter.previousIndex() + 1;            for (Student student = studentsIter.previous(); (Double) fieldGetter.transform(student) > groundLimitValue; student = studentsIter                    .previous()) {                fieldSetter.execute(new GenericPair<Student, Character>(student, classification));            }            studentsIter.next();            groundLimitIndex = studentsIter.nextIndex();            studentsClassifications.put(classification, students.subList(groundLimitIndex, limitIndex));            classification++;        }//        List<Student> weakStudents = students.subList((int) Math.ceil(students.size()//                * (limits[0] / 100.0)), studentsIter.nextIndex());//        for (Student weakStudent : weakStudents) {//            fieldSetter.execute(new GenericPair<Student, Character>(weakStudent, classification));//        }//        studentsClassifications.put(classification, weakStudents);        return studentsClassifications;    }