Java

时间:2018-10-12 12:10:18

标签: java list arraylist java-10

我有一个dto类,其中存储了一些学生证和特定科目的成绩。基本上是这样的。

List<StudentInfoDTO> studentInfoDTO = new ArrayList<>();

StudentInfoDTO如下所示

public class StudentInfoDTO {

    Long studentId;
    Short marks;

}

现在我想要分数最小的学生证。

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

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;
    }                       
}

5 个答案:

答案 0 :(得分:7)

您还可以使用流,它具有一种方便的方法,称为min()

studentInfoDTO.stream().min(Comparator.comparing(StudentInfoDTO::getMarks));

答案 1 :(得分: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;
        }
    }

Java 5样式:

    StudentInfoDTO smallest = null;
    for (StudentInfoDTO current : studentInfoDTO) {
        if (smallest == null || current.getMarks() < smallest.getMarks()) {
            smallest = current;
        }
    }

Java 8样式:

        StudentInfoDTO smallest = studentInfoDTO.stream()
                                            .min(Comparator.comparing(StudentInfoDTO::getMarks))
                                            .get();

答案 2 :(得分:3)

在您的代码中,您一次又一次地分配smallest,而这意味着所有时间都具有最小的标记。另外,您还需要维护学生分数最小的ID,否则以后将无法访问。

int smallest = MAX_MARKS;
int id = -1;
for(int i =0; i<studentInfoDTO.size();i++) {
   int x = studentInfoDTO.get(i).getMarks();
   if (x < smallest) {
      smallest = x;
      i = studentInfoDTO.get(i).getStudentId();
   }
}
if(id!=-1){
   System.out.println("id of smallest marks student : " + id);
}

答案 3 :(得分:2)

Integer minMarks = studentInfoDTO
      .stream()
      .mapToInt(StudentInfoDTO::getMarks)
      .min().orElseThrow(NoSuchElementException::new);

答案 4 :(得分:0)

问题是您正在比较相同的x和最小值。因此,如果条件始终失败。这样可以解决问题。

int smallest = studentInfoDTO.get(0).getMarks();
for(int i =0; i<studentInfoDTO.size() - 1;i++) 
{
 int x = studentInfoDTO.get(i + 1).getMarks();
 if (x < smallest) {
    smallest = x;
 }
}