Подсчитать элементы в Arraylist, которые имеют определенный атрибут - PullRequest
2 голосов
/ 05 марта 2012

Я хочу выполнить код, если ни один из элементов в Arraylist не имеет атрибута «slotted», установленного в false.Я использую следующий код:

int p=0;

 for (int i = 0; i < AppleList.size();i++){
     if (AppleList.get(i).slotted = true){
        p++;
     } 

if (p == 0){

    //EXECUTE CODE

}

Есть ли способ сделать это лучше?

Ответы [ 4 ]

5 голосов
/ 05 марта 2012

Вы можете сделать это, используя расширенный цикл for и метку:

label:
{
    for(Foo f : AppleList) if(!f.slotted) break label;

    // Here you guaranteed that all slotted fields are true
}
3 голосов
/ 05 марта 2012

В вашем коде есть пара ошибок.Во-первых, отсутствует }, а во-вторых:

AppleList.get(i).slotted = true
//                       ^ should be ==

По поводу вашего вопроса:

выполните код, если ни один из элементов в Arraylist не имеет атрибута «slotted», установленный в false.

Или все элементы должны быть прорезаны.Поэтому, если любой элемент имеет slotted, установленный на false, не выполняйте код:

boolean allSloted = true;

//   VVVVV or appropriate type
for (Apple a : AppleList) {
    if (!a.slotted) {
        allSloted = false;
        break;
    }
}

if (allSloted) {
    // EXECUTE CODE
}
2 голосов
/ 05 марта 2012
for ( int i = 0; i < AppleList.size() && !AppleList.get( i ).slotted; i++ ) {
}

if ( i == AppleList.size() ) {
  //EXECUTE CODE
}

или

boolean foundNonSlotted = false;
for ( int i = 0; i < AppleList.size(); i++ ) {
   if ( !AppleList.get( i ).slotted ) {
     foundNonSlotted = true;
     break;
   }
}

if ( foundNonSlotted ) {
  //EXECUTE CODE
}
1 голос
/ 05 марта 2012

Если я, где ты, я сделаю это так

boolean flag=true;

for (int i = 0; i < AppleList.size();i++){
   if (!AppleList.get(i).slotted){
      flag = false;
      break;
     }  
   } 
 if (flag){
   //EXECUTE CODE
}

здесь это может отличаться по производительности, потому что big (O) может быть равен (1) "Я имею в виду, что если первый элемент в массиве равен true, то вам нужно выполнить свой код, вам не нужно завершать цикл, чтобы равный размеру массива "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...