来自java中未分类的arraylist的最小元素

Anj*_*ali 0 java list arraylist java-10

我有一个dto类,它存储了一些特定主题的学生和标记.基本上是这样的.

List<StudentInfoDTO> studentInfoDTO = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

其中StudentInfoDTO如下所示

public class StudentInfoDTO {

    Long studentId;
    Short marks;

}
Run Code Online (Sandbox Code Playgroud)

现在我想要有最小分数的学生ID.

我在下面试过但没有给出预期的结果.

int smallest = 0;
for(int i = 0; i < studentInfoDTO.size(); i++) {
    smallest = studentInfoDTO.get(i).getMarks();
    int x = studentInfoDTO.get(i).getMarks();
    if (x < smallest) {
        smallest = x;
    }                       
}
Run Code Online (Sandbox Code Playgroud)

ree*_*bow 7

你也可以使用流,它有一个方便的方法叫做min()

studentInfoDTO.stream().min(Comparator.comparing(StudentInfoDTO::getMarks));
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以通过以下多种方式实现:

Java 1.4风格:

    StudentInfoDTO smallest = null;
    for (int i = 0; i < studentInfoDTO.size(); i++) {
        StudentInfoDTO current = studentInfoDTO.get(i);
        if (smallest == null || current.getMarks() < smallest.getMarks() ) {
            smallest = current;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Java 5风格:

    StudentInfoDTO smallest = null;
    for (StudentInfoDTO current : studentInfoDTO) {
        if (smallest == null || current.getMarks() < smallest.getMarks()) {
            smallest = current;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Java 8风格:

        StudentInfoDTO smallest = studentInfoDTO.stream()
                                            .min(Comparator.comparing(StudentInfoDTO::getMarks))
                                            .get();
Run Code Online (Sandbox Code Playgroud)