Pesquisa ArrayList?

Então preciso que o usuário digite o nome da cidade cadastrada por ele na opção 1 ou a primeira letra da cidade, é o programa mostre apenas a cidade pesquisada com os seus respectivos dados, caso não encontre a cidade apareça uma mensagem que retornara a tela inicial.
Segue abaixo o código, por favor galera se puderem responder o mais rápido eu agradeço.

public class Principal {
    public static void main(String[] args){
        String City, nCidade, nHabitantes, prefeito, vizinhos;
        int x = 0, cont =1;
        int y = 9;
        ArrayList<Estado> cd = new ArrayList <>();
	String nomes = "";

		do {
		City = JOptionPane.showInputDialog(null,"|ESCOLHA A OPÇÃO DESEJADA|" 
				+ "\n1) CADASTRAR CIDADE"
				+ "\n2) MOSTRA CIDADES CADASTRADAS"  
				+ "\n3) PESQUISAR CIDADE"
				+ "\n4) MELHOR ROTA"
				+ "\n5) DIGITE ESC PARA SAIR","|ROTA FELIZ|", JOptionPane.PLAIN_MESSAGE);

		do {
		if(City.toUpperCase().equals("1")){
			Estado entidade = new Estado();
			nCidade = JOptionPane.showInputDialog(null,"NOME DA CIDADE: ","CADASTRO", JOptionPane.PLAIN_MESSAGE);
			entidade.setnCidade(nCidade);
			nHabitantes = JOptionPane.showInputDialog(null,"QUANTIDADE DE HABITANTES: ","CADASTRO", JOptionPane.PLAIN_MESSAGE);
			entidade.setnHabitantes(Integer.parseInt(nHabitantes));
			prefeito = JOptionPane.showInputDialog(null,"NOME DO PREFEITO: ","CADASTRO", JOptionPane.PLAIN_MESSAGE);
			entidade.setPrefeito(prefeito);
			vizinhos = JOptionPane.showInputDialog(null,"VIZINHOS: ","CADASTRO", JOptionPane.PLAIN_MESSAGE);
			entidade.setVizinhos(vizinhos);
			cd.add(entidade);
			x = Integer.parseInt(JOptionPane.showInputDialog(null,"Digite qualquer tecla para sair ou 0 para cadastrar outra cidade"));
		}cont++;
		}while ((x==0)&&(cont<=2));

    
        if(City.toUpperCase().equals("2")){
            
            for(Estado nome : cd){
			nomes += nome+"\n";
	    }
	    JOptionPane.showMessageDialog(null, nomes, "TODAS AS CIDADES", JOptionPane.INFORMATION_MESSAGE);
	}
        
        if(City.toUpperCase().equals("3")){
            String busca = JOptionPane.showInputDialog(null,"DIGITE A CIDADE DESEJADA: ","PESQUISAR CIDADE", JOptionPane.PLAIN_MESSAGE);
            for(Estado buscas : cd){
                    busca = buscas+"\n";
            }
            
	    JOptionPane.showMessageDialog(null, busca, "CIDADE PESQUISADA", JOptionPane.INFORMATION_MESSAGE);
        }
        
        }while (y==9);
    }
}

Não entendi muito bem a parte da primeira letra da cidade.

Mas a outra basta você fazer um for que vá percorrer o array de cidades e fazer uma comparação com a string que você recebeu por meio do usuário, cidades[i].equals(stringRecebida), Quando essa condição for verdadeira você informa os dados da cidade.

No caso eu percorri a arraylist, porém não faço a minima ideia de como fazer essa comparação…

if(City.toUpperCase().equals("3")){
        String busca = JOptionPane.showInputDialog(null,"DIGITE A CIDADE DESEJADA: ","PESQUISAR CIDADE", JOptionPane.PLAIN_MESSAGE);
        for (int i = 0; i < cd.size(); ++i) {
            
        }
        
    JOptionPane.showMessageDialog(null, busca, "CIDADE PESQUISADA", JOptionPane.INFORMATION_MESSAGE);
    }

Você está gravando tudo dentro de uma lista, certo?

Pra pegar o valor dessa lista basta você fazer isso dentro de um for, cd.get(i)
Você vai estar chamando os objetos de dentro dessa lista um por um

Para pegar o nome da cidade para realizar a comparação você vai fazer o que foi dito acima e pegar o nome da cidade pelo get, cd.get(i).getnCidade();

Agora você já tem o nome da cidade, basta realizar a comparação entre duas string, > cd.get(i).getnCidade().equals(busca);

Coloca isso dentro de um if, e quando forem iguais você exibe as informações daquela cidade.

if(cd.get(i).getnCidade().equals(busca)) {
cd.get(i).getncidade();
cd.get(i).getnHabitantes;
etc…
}

Estou quase lá, me ajudou bastante, porém na hora de imprimir a cidade buscada está aparecendo o que digitei na busca e não a cidade com os dados, creio que o erro esteja no JOptionPane.

if(City.toUpperCase().equals("3")){
        String busca = JOptionPane.showInputDialog(null,"DIGITE A CIDADE DESEJADA: ","PESQUISAR CIDADE", JOptionPane.PLAIN_MESSAGE);
        for (int i = 0; i < cd.size(); ++i) {
            if(cd.get(i).getnCidade().equals(busca)) {
              cd.get(i).getnCidade();
              cd.get(i).getnHabitantes();
              cd.get(i).getPrefeito();
              cd.get(i).getVizinhos();
        }
        
    JOptionPane.showMessageDialog(null, cd, "CIDADE PESQUISADA", JOptionPane.INFORMATION_MESSAGE);
        }
    }

Tente assim:

String cidadeBuscada = “Não foi encontrada.”;
if(City.toUpperCase().equals(“3”)){
String busca = JOptionPane.showInputDialog(null,"DIGITE A CIDADE DESEJADA: ",“PESQUISAR CIDADE”, JOptionPane.PLAIN_MESSAGE);
for (int i = 0; i < cd.size(); i++) {
if(cd.get(i).getnCidade().equals(busca)) {
cidadeBuscada = (
cd.get(i).getnCidade()+ “\n” +
cd.get(i).getnHabitantes()+ “\n” +
cd.get(i).getPrefeito()+ “\n” +
cd.get(i).getVizinhos()+ “\n”);
}

JOptionPane.showMessageDialog(null, cidadeBuscada, "CIDADE PESQUISADA", JOptionPane.INFORMATION_MESSAGE);
    }
}
1 curtida

Cara valeu mesmo. Deu certo.