Я проверил код, который вы разместили, и он почти работал. За исключением того, что последняя группа не была добавлена.
Вот улучшенный код, который я протестировал и который работал:
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
public class StudentInfo {
private String startRange;
private String endRange;
private boolean isPass;
public static void main(String[] args) {
SortedMap<String, Boolean> studentDetails = new TreeMap<String, Boolean>();
studentDetails.put("1000", false);
studentDetails.put("1001", false);
studentDetails.put("1002", false);
studentDetails.put("1003", true);
studentDetails.put("1004", true);
studentDetails.put("1005", true);
studentDetails.put("1006", false);
studentDetails.put("1007", true);
studentDetails.put("1008", false);
studentDetails.put("1009", false);
List<StudentInfo> list = new ArrayList<StudentInfo>();
createStudentInfo(studentDetails, list);
list.stream().forEach(System.out::println);
}
private static void createStudentInfo(SortedMap<String, Boolean> studentDetails, List<StudentInfo> list) {
StudentInfo studentInfo;
List<String> pass = new ArrayList<String>();
List<String> fail = new ArrayList<String>();
for (Map.Entry<String, Boolean> entry : studentDetails.entrySet()) {
studentInfo = new StudentInfo();
if (!entry.getValue()) {
fail.add(entry.getKey());
if (pass.size() > 0) {
studentInfo.setStartRange(pass.get(0));
studentInfo.setEndRange(pass.get(pass.size() - 1));
studentInfo.setPass(true);
list.add(studentInfo);
pass.clear();
}
}
else {
pass.add(entry.getKey());
if (fail.size() > 0) {
studentInfo.setStartRange(fail.get(0));
studentInfo.setEndRange(fail.get(fail.size() - 1));
studentInfo.setPass(false);
list.add(studentInfo);
fail.clear();
}
}
}
if (!pass.isEmpty()) {
studentInfo = new StudentInfo();
studentInfo.setStartRange(pass.get(0));
studentInfo.setEndRange(pass.get(pass.size() - 1));
studentInfo.setPass(true);
list.add(studentInfo);
}
else if (!fail.isEmpty()) {
studentInfo = new StudentInfo();
studentInfo.setStartRange(fail.get(0));
studentInfo.setEndRange(fail.get(fail.size() - 1));
studentInfo.setPass(false);
list.add(studentInfo);
}
}
@Override
public String toString() {
return "StudentInfo [startRange=" + startRange + ", endRange=" + endRange + ", isPass=" + isPass + "]";
}
public String getStartRange() {
return startRange;
}
public void setStartRange(String startRange) {
this.startRange = startRange;
}
public String getEndRange() {
return endRange;
}
public void setEndRange(String endRange) {
this.endRange = endRange;
}
public boolean isPass() {
return isPass;
}
public void setPass(boolean isPass) {
this.isPass = isPass;
}
}
Вывод был:
StudentInfo [startRange=1000, endRange=1002, isPass=false]
StudentInfo [startRange=1003, endRange=1005, isPass=true]
StudentInfo [startRange=1006, endRange=1006, isPass=false]
StudentInfo [startRange=1007, endRange=1007, isPass=true]
StudentInfo [startRange=1008, endRange=1009, isPass=false]