Как вывести объект из цикла for - PullRequest
3 голосов
/ 17 февраля 2020

У меня есть следующий метод, который должен вернуть объект product , если его атрибут name соответствует входной строке.

public Product find(String nameInput){  
 for(Product product : this.Products){           
        if(product.getName().equalsIgnoreCase(nameInput)){
            return product;                        
        }     
   }
}

Это дает мне следующую ошибку:

enter image description here

Я знаю, что мог бы вернуть ноль в конце метода , однако есть ли более элегантный способ сделать это?

Ответы [ 4 ]

1 голос
/ 17 февраля 2020

Сделайте это следующим образом:

public Product find(String nameInput){  
    Product p = null;
    for(Product product : this.Products){           
        if(product.getName().equalsIgnoreCase(nameInput)){
            p = product;
            break;                        
        }     
    }
    return p;
}
1 голос
/ 17 февраля 2020

Вы можете сделать:

public Optional<Product> find(String nameInput){  
 for(Product product : this.Products){           
        if(product.getName().equalsIgnoreCase(nameInput)){
            return Optional.of(product)                        
        }     
   }
    return Optional.empty();
}

или, что еще лучше, заменить ForEach l oop на Stream.

, тогда вы можете использовать ifPresent

  find("Stackoverflow").ifPresent(consumer)
1 голос
/ 17 февраля 2020

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

public Optional<Product> find(String nameInput){  
  for(Product product : this.Products){           
    if(product.getName().equalsIgnoreCase(nameInput)){
        return Optional.of(product);                        
    }     
  }
  return Optional.empty();
}

Кроме того, как уже упоминалось в нескольких других плакатах, я бы использовал потоковый api вместо a для каждого l * 1006. *.

1 голос
/ 17 февраля 2020

Вы можете использовать stream и findFirst для возврата Optional с первым соответствием Product или пустым Optional

this.Products.stream()
             .filter(p->p.getName().equalsIgnoreCase(nameInput))
             .findFirst();

Вы также можете использовать orElse методы для Optional для возврата значения по умолчанию

...