2016-07-14 4 views
-3

У меня есть список объектов студентов; Я хочу узнать, имеет ли хотя бы один ученик действительный идентификатор или нет. если все из них в списке имеют недопустимый идентификатор или пустой идентификатор, тогда я должен существовать и выдавать исключение. Каков наилучший способ сделать это в JAVA?Каков наилучший способ перебора списка и выхода в 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 
+2

Вы пробовали что-нибудь? Это звучит как запрос кода –

+0

Я повторяю список массивов и с условием if, когда хотя бы один из идентификаторов студентов не равен нулю – Santosh

ответ

0
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 
} 
+0

здесь прост для каждого цикла –

+0

Было бы лучше бросить исключение во время выполнения, такое как 'IllegalArgumentException' или' IllegalStateException'; в общем, «Исключение» никогда не следует бросать. –

+1

Это не то, о чем попросил ОП. Он выбрасывает исключение. * У любого студента есть недопустимый идентификатор. OP хочет иметь только исключение, если * все * идентификаторы студента недействительны. –

0

Если у вас есть какой-либо метод для проверки достоверности в идентификаторам, самый простой, вероятно, будет использовать Java-8 в потоковые возможности:

List<Student> students = ...; 
boolean hasValid = students.stream().anyMatch(s -> isValid(s.getId())); 

EDIT:
Если вы Арен» t, используя Java 8, вы всегда можете создать такое же поведение, перейдя по списку и остановившись, как только вы встретите действительного ученика:

private static boolean hasValidStudent(Collection<Student> students) { 
    for (Student s : students) { 
     if (isValid(s.getId()) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

Спасибо за ответ. Я использую java 7 и ниже. можете ли вы предложить, как реализовать в Java 7 и более низких версиях. – Santosh

+0

@Santosh, если вы все еще в Java 7, вы можете просто перебрать их. См. Мой отредактированный ответ. – Mureinik

0
List<Student> students = ... 
boolean anyValid = false; 
for (Student student : students) { 
    anyValid = anyValid || isValid(student.getId()); 
} 
if (!anyValid) { 
    // throw proper Exception 
} 
+0

Если вам действительно нужно выйти, когда условие вам необходимо заменить foreach на Итератор: Итератор studentsIterator = students.iterator(); while (! AnyValid && studentsIterator.hasNext()) { anyValid = anyValid || IsValid (studentsIterator.next() GetId().);} – garnulf

Смежные вопросы