Gostaria de saber como eu podia fazer uma pesquisa em uma arraylist, passando um determinado valor e retornando todos os dados que contem o valor passado?
exemplo: Usuario cadastra uma Serie, passando titulo, sinopse, temporada, ep e se for vista ou nao.
Podendo faze uma pesquisa, por titulo e se foi vista ou nao.
quando eu passo o valor para a pesquisa esta retornando apenas um conjunto por vez.
Se tiver mais de uma serie com status = S retorna apenas uma delas em vez de todas.
=> faz pesquisa
public void pesquisarStatus() {
System.out.println("==> PESQUISAR! ");
System.out.println("Vista S|N : “);
status = leitorString.next();
if (!(SerieArray.getListSeries().isEmpty())) {
System.out.println(”==> "+ SerieArray.pesquisarStatus(status));
}
}
=> Procura no ArrayList
static public String pesquisarStatus(String status){
for(Serie s : listSerie){
if(s.getStatus().equalsIgnoreCase(status)){
return s.mostrar();
}
}
return status;
}
O que estás aqui a fazer é, retorna o primeiro que faça match com a pesquisa. Se não encontrar nenhum, retorna a string pesquisada.
Se queres devolver vários resultados, terás de retornar uma lista e não apenas uma String
public List<String> pesquisarStatus(String status){
List<String> resultados = new ArrayList(); // cria a lista para retornar
for(Serie s : listSerie){
if(s.getStatus().equalsIgnoreCase(status)){
resultados.add(s.mostrar()); // se encontra, adiciona à lista
}
}
return resultados; // retorna a lista. Será vazia se nenhum resultado foi encontrado
}
E era assim que se fazia no velho java (e ainda funciona). Mas, desde o java 8, com streams, tens maneira mais fácil de fazer a mesma coisa.
List<String> pesquisarStatus(String status){
return listSerie
.stream() // percorre a lista
.filter(s -> s.getStatus().equalsIgnoreCase(status)) // filtra o status
.map(Serie::mostrar) // pega o retorno de mostrar
.collect(Collectors.toList()); // adiciona a uma lista
}