Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中迭代列表并退出的最佳方式是什么_Java_Collections - Fatal编程技术网

在java中迭代列表并退出的最佳方式是什么

在java中迭代列表并退出的最佳方式是什么,java,collections,Java,Collections,我有一份学生对象清单;我想知道是否至少有一个学生有有效的身份证。如果列表中的所有对象都有无效ID或空白ID,那么我应该存在并抛出异常。在JAVA中,最好的方法是什么 范例 List<Student> Students; class Student { int ID; String Name; int Marks; } Student one ID = 1,name = Ram,Marks = 50 Stude

我有一份学生对象清单;我想知道是否至少有一个学生有有效的身份证。如果列表中的所有对象都有无效ID或空白ID,那么我应该存在并抛出异常。在JAVA中,最好的方法是什么

范例

    List<Student> Students;
    class Student {
    int ID;
    String Name;
    int Marks;
    }

    Student one
    ID = 1,name = Ram,Marks = 50

    Student two
    ID = "",name = Syam,Marks = 60

    Student three
    ID = 2,name = Sudan,Marks = 70
列出学生名单;
班级学生{
int-ID;
字符串名;
整数标记;
}
学生一
ID=1,名称=Ram,标记=50
学生二
ID=”“,name=Syam,Marks=60
学生三
ID=2,name=Sudan,Marks=70

假设您有某种方法来检查ID的有效性,最简单的方法可能是使用Java 8的流功能:

List<Student> students = ...;
boolean hasValid = students.stream().anyMatch(s -> isValid(s.getId()));
列出学生=。。。;
布尔hasValid=students.stream().anyMatch(s->isValid(s.getId());
编辑:
如果您不使用Java 8,您可以通过在列表上循环并在遇到有效学生时停止来创建相同的行为:

private static boolean hasValidStudent(Collection<Student> students) {
    for (Student s : students) {
        if (isValid(s.getId()) {
            return true;
        }
    }
    return false;
}
private静态布尔hasValidStudent(收集学生){
(学生:学生){
if(isValid(s.getId()){
返回true;
}
}
返回false;
}
列出学生=。。。
布尔anyValid=false;
用于(学生:学生){
anyValid=anyValid | | isValid(student.getId());
}
如果(!anyValid){
//抛出适当的异常
}

您尝试过什么吗?这听起来像是一个代码请求。我正在迭代数组列表,并且有一个if条件,其中至少有一个学生ID不是空的。谢谢您的回答。我正在使用java 7和更低版本。您能建议如何在java 7和更低版本中实现吗。@Santosh如果您仍然使用java 7,您可以循环使用它们。请参阅我编辑的答案。这里对每个循环都很简单。最好抛出一个运行时异常,例如
IllegalArgumentException
IllegalStateException
;一般来说,
exception
不应该被抛出。这不是OP要求的。如果任何学生的id无效,OP都会抛出一个异常。OP只希望如果所有学生ID都无效,则产生异常。Stefan你是正确的,这不是我想要的。只有当所有学生都没有有效ID时,代码才会引发异常。我已注释//最好使用自定义异常的某个异常子类everIf你真的需要在满足条件时退出,你需要用迭代器替换foreach:迭代器studentsIterator=students.Iterator();而(!anyValid&&studentsIterator.hasNext()){anyValid=anyValid | | isValid(studentsIterator.next().getId());}
boolean isAllInvalid= true;
for(Student student : students){ 
 if(student.getID() != null && studend.getID() >=1 ){// this checks for a valid id 
  system.out.print(student+ " has a valid id");
  isAllInvalid =false; 
  break;//early exit no need to keep looping cuz we found at least one valid id ,if you to print all valid remove the break statement.
 } 
}
 if(isAllInvalid){
   throw new SomeException("All students are invalid") ;//choose ur suitable exception
 }
List<Student> students = ...
boolean anyValid = false;
for (Student student : students) {
    anyValid = anyValid || isValid(student.getId());
}
if (!anyValid) {
    // throw proper Exception
}