GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Busca de um objeto dentro de um array

Olá pessoal, tudo bem?
Estou começando a aprender Java e conhecendo um pouco mais sobre orientação a objeto, e estou com uma dúvida em um sistema que estou tentando fazer.

Basicamente preciso fazer a busca de um livro dentro da biblioteca, porém, não estou conseguindo fazer essa parte.

Atualmente essa é minha Main

public class Main {

static Biblioteca bib = new Biblioteca();
static CadastrosPessoas cp = new CadastrosPessoas();
static Scanner in = new Scanner(System.in);
static Boolean running = true;

public static void main(String[] args) {
	while (running) {
		System.out.println(
				
				 "Digite 1 adicionar um livro\n"
				+ "Digite 2 listar todos os livros\n"
				+ "Digite 3 para adicionar uma pessoa\n"
				+ "Digite 4 para listar todas as pessoas\n"
				+ "Digite 5 para pesquisar\n");
		int opcao = in.nextInt();
		switch(opcao) {
		case 1:
			addLivro();
			break;
		case 2:
			System.out.println(bib.toString());
			break;
		case 3:
			addPessoa();
			break;
		case 4:
			System.out.println(cp.toString());
			break;
		case 5:
			System.out.println("Digite o titulo do livro que gostaria de pesquisar:\n");
			String pesquisa = in.next();
			break;
		}
	}
}

E essa é a classe que estou usando para fazer a listagem dos livros, e adicionando ela.

public class Biblioteca implements Serializable {

private List<Livro> collection;

public Biblioteca() {
	collection = new ArrayList<Livro>();
}

public void adicionaLivro(Livro livro) {
	collection.add(livro);
}



public String toString() {
	String total = "\n";
	for (int i=0; i<collection.size(); i++) {
		Livro b = collection.get(i);
		total = total + b.toString();
	}
	return total;
}

}

Como comentei antes, gostaria de saber como faço para buscar um dos livros dentro desse array!
Desde já agradeço.

Supondo que livro tenha um título e haja um getter correspondente (supondo já que não postou a classe Livro):

Pesquisar com base em quê? Nome?, Id?

if(livro.getTitulo().equals("Memórias Póstumas de Brás Cubas"){
	faça alguma coisa...
}

Isso é claro dentro de um método conveniente.

Classe Livro

public class Livro implements Serializable {

private int isbn;
private String titulo;
private String autor;
private String genero;

public Livro() {
	isbn = 0;
	titulo = null;
	autor = null;
	genero = null;
}

public Livro(int isbn, String titulo, String autor, String genero) {
	this.isbn = isbn;
	this.titulo = titulo;
	this.autor = autor;
	this.genero = genero;
}


public String toString() {
	return "\nISBN: " + isbn + "\nTitulo: " + titulo + "\nAutor: " + autor + "Genero: " + genero;
}

}

Supondo que o método addLivro() preencha a lista livros e que a sua classe Livro tivesse os métodos acessores e modificadores (getter e setter):

Obs 1: Se o dados da classe Livro são privados, deve haver interfaces (métodos públicos) que permitam o seu acesso, isto é, getters e setter. Por exemplo, se os métodos de busca e exibição estiverem no main, esses dados não estarão disponíveis.

Obs 2: são só uma ‘norte’ para tu seguir a lógica, não a implementação.

public Livro pesquisarLivro(int isbnInformado){
	for(Livro livro : livros){
		if(livro.getIsbn() == isbnInformado){
			return livro;
		}
	}
}

public Livro pesquisarLivro(String dado){
	for(Livro livro : livros){
		if(livro.getTitulo().equals(dado))
			return livro;
			
		else if(livro.getAutor().equals(dado))
			return livro;
		
		else if(livro.getGenero.equals(dado))
			return livro;
	}
	return null;
}

private exibirDados(Livro livro){
	System.out.println("ISBN: " + livro.getIsbn());
	System.out.println("Título: " + livro.getTitulo());
	System.out.println("Autor: " + livro.getAutor());
	System.out.println("Gênero: " + livro.getGenero());
}
//