Introdução
Neste laboratório, você aprenderá como verificar se um elemento específico existe dentro de um array Java usando diferentes técnicas. Começaremos explorando a abordagem fundamental de iterar pelo array usando um loop for tradicional para procurar o elemento.
Após o método de iteração básico, você descobrirá como aproveitar o método Arrays.stream() para uma maneira mais concisa e potencialmente mais eficiente de verificar a presença do elemento. Finalmente, abordaremos a importante consideração de lidar com elementos nulos dentro do array durante suas operações de busca.
Iterar pelo Array para Encontrar o Elemento
Nesta etapa, você aprenderá como verificar se um elemento específico existe dentro de um array Java, iterando por ele usando um loop for tradicional. Esta é uma técnica fundamental para pesquisar dentro de coleções de dados.
Primeiro, vamos criar um novo arquivo Java chamado ArraySearch.java no seu diretório ~/project. Você pode fazer isso usando o explorador de arquivos WebIDE à esquerda ou executando o seguinte comando no terminal:
touch ~/project/ArraySearch.java
Agora, abra o arquivo ArraySearch.java no editor WebIDE e adicione o seguinte código Java:
public class ArraySearch {
public static void main(String[] args) {
// Define an array of strings
String[] fruits = {"Apple", "Banana", "Cherry", "Date", "Elderberry"};
// The element we want to search for
String searchElement = "Cherry";
// Variable to keep track if the element is found
boolean found = false;
// Loop through the array
for (int i = 0; i < fruits.length; i++) {
// Check if the current element is equal to the search element
if (fruits[i].equals(searchElement)) {
found = true; // Element found
break; // Exit the loop since we found the element
}
}
// Print the result
if (found) {
System.out.println(searchElement + " was found in the array.");
} else {
System.out.println(searchElement + " was not found in the array.");
}
}
}
Vamos detalhar este código:
String[] fruits = {"Apple", "Banana", "Cherry", "Date", "Elderberry"};: Esta linha declara e inicializa um array de strings chamadofruitscom vários nomes de frutas.String searchElement = "Cherry";: Esta linha declara uma variável de stringsearchElemente atribui o valor "Cherry" a ela. Este é o elemento que estamos procurando no array.boolean found = false;: Esta linha declara uma variável booleanafounde a inicializa comofalse. Definiremos isso comotruese encontrarmos osearchElementno array.for (int i = 0; i < fruits.length; i++): Este é um loopforpadrão que itera pelo array.icomeça em 0 e vai até (mas não incluindo) o comprimento do arrayfruits.if (fruits[i].equals(searchElement)): Dentro do loop, esta instruçãoifverifica se o elemento atual do array (fruits[i]) é igual aosearchElement. Usamos o método.equals()para comparar strings em Java, não o operador==.found = true;: Se os elementos forem iguais, definimos a variávelfoundcomotrue.break;: Uma vez que o elemento é encontrado, usamos a instruçãobreakpara sair do loop antecipadamente, pois não há necessidade de continuar a busca.- O bloco
if/elsefinal imprime uma mensagem indicando se osearchElementfoi encontrado com base no valor da variávelfound.
Salve o arquivo ArraySearch.java (Ctrl+S ou Cmd+S).
Agora, vamos compilar e executar o programa no terminal. Certifique-se de estar no diretório ~/project.
Compile o código:
javac ArraySearch.java
Se não houver erros, um arquivo ArraySearch.class será criado.
Execute o código compilado:
java ArraySearch
Você deve ver a seguinte saída:
Cherry was found in the array.
Agora, tente alterar o searchElement para algo que não está no array, como "Grape", salve o arquivo, recompil e execute-o novamente para ver a saída diferente.
Usar Arrays.stream() para Verificação de Elemento
Nesta etapa, você aprenderá uma maneira mais moderna e, muitas vezes, mais concisa de verificar a existência de um elemento em um array Java usando a API Streams, especificamente Arrays.stream(). Essa abordagem aproveita os conceitos de programação funcional e pode tornar seu código mais legível para certas tarefas.
Modificaremos o arquivo ArraySearch.java que você criou na etapa anterior. Abra ~/project/ArraySearch.java no editor WebIDE.
Substitua o código existente pelo seguinte:
import java.util.Arrays;
public class ArraySearch {
public static void main(String[] args) {
// Define an array of strings
String[] fruits = {"Apple", "Banana", "Cherry", "Date", "Elderberry"};
// The element we want to search for
String searchElement = "Cherry";
// Use Arrays.stream() to check if the element exists
boolean found = Arrays.stream(fruits).anyMatch(fruit -> fruit.equals(searchElement));
// Print the result
if (found) {
System.out.println(searchElement + " was found in the array.");
} else {
System.out.println(searchElement + " was not found in the array.");
}
}
}
Vamos analisar as mudanças:
import java.util.Arrays;: Precisamos importar a classeArrayspara usar seu métodostream().boolean found = Arrays.stream(fruits).anyMatch(fruit -> fruit.equals(searchElement));: Este é o núcleo da nova abordagem.Arrays.stream(fruits): Isso converte o arrayfruitsem umStream. Um stream é uma sequência de elementos que suporta várias operações..anyMatch(fruit -> fruit.equals(searchElement)): Esta é uma operação de stream.anyMatch()verifica se qualquer elemento no stream corresponde à condição fornecida. A condição é fornecida como uma expressão lambdafruit -> fruit.equals(searchElement). Essa expressão lambda pega cadafruitdo stream e verifica se ele é igual aosearchElement. Se uma correspondência for encontrada,anyMatch()retornatrueimediatamente.
Essa abordagem baseada em stream atinge o mesmo resultado que o loop for, mas em um estilo mais declarativo – você descreve o que deseja fazer (encontrar se algum elemento corresponde à condição) em vez de como fazê-lo (iterar passo a passo).
Salve o arquivo ArraySearch.java (Ctrl+S ou Cmd+S).
Agora, compile e execute o programa modificado no terminal do diretório ~/project:
Compile o código:
javac ArraySearch.java
Execute o código compilado:
java ArraySearch
Você deve ver a mesma saída que antes:
Cherry was found in the array.
Novamente, sinta-se à vontade para alterar o searchElement para testar o caso else.
Lidar com Elementos Nulos
Nesta etapa, consideraremos um cenário comum em Java: lidar com valores null em arrays. Se um array contiver elementos null, nossos métodos anteriores podem encontrar problemas. Aprenderemos como lidar com nulls com segurança ao pesquisar um elemento.
Abra o arquivo ~/project/ArraySearch.java no editor WebIDE novamente.
Modifique o array fruits para incluir um elemento null:
import java.util.Arrays;
import java.util.Objects; // Import the Objects class
public class ArraySearch {
public static void main(String[] args) {
// Define an array of strings with a null element
String[] fruits = {"Apple", null, "Banana", "Cherry", "Date", "Elderberry"};
// The element we want to search for
String searchElement = "Cherry";
// Use Arrays.stream() and handle nulls
boolean found = Arrays.stream(fruits)
.anyMatch(fruit -> Objects.equals(fruit, searchElement)); // Use Objects.equals
// Print the result
if (found) {
System.out.println(searchElement + " was found in the array.");
} else {
System.out.println(searchElement + " was not found in the array.");
}
// Let's also search for null itself
String searchNullElement = null;
boolean foundNull = Arrays.stream(fruits)
.anyMatch(fruit -> Objects.equals(fruit, searchNullElement));
if (foundNull) {
System.out.println("null was found in the array.");
} else {
System.out.println("null was not found in the array.");
}
}
}
Aqui está o que mudamos:
import java.util.Objects;: Importamos a classeObjects, que fornece métodos utilitários para objetos, incluindo o tratamento seguro denull.String[] fruits = {"Apple", null, "Banana", "Cherry", "Date", "Elderberry"};: Adicionamosnullcomo o segundo elemento no arrayfruits..anyMatch(fruit -> Objects.equals(fruit, searchElement)): Em vez defruit.equals(searchElement), agora usamosObjects.equals(fruit, searchElement). O métodoObjects.equals()foi projetado para lidar com valoresnullde forma adequada. Ele retornatruese ambos os argumentos foremnulle evita lançar umaNullPointerExceptionse o primeiro argumento (fruit, neste caso) fornull.- Adicionamos uma segunda pesquisa para demonstrar a localização do próprio
nullno array usando o mesmo métodoObjects.equals().
Salve o arquivo ArraySearch.java (Ctrl+S ou Cmd+S).
Compile e execute o programa modificado no terminal do diretório ~/project:
Compile o código:
javac ArraySearch.java
Execute o código compilado:
java ArraySearch
Você deve ver a seguinte saída, demonstrando que tanto "Cherry" quanto null foram encontrados:
Cherry was found in the array.
null was found in the array.
Usar Objects.equals() é a maneira recomendada de comparar objetos, especialmente quando há a possibilidade de um ou ambos os objetos serem null. Isso evita erros inesperados de NullPointerException.
Resumo
Neste laboratório, você aprendeu um método fundamental para verificar se um elemento específico existe dentro de um array Java: iterar pelo array usando um loop for tradicional. Você praticou a criação de um arquivo Java, a definição de um array e um elemento de pesquisa, a implementação do loop para comparar elementos e o uso de uma flag booleana para rastrear se o elemento foi encontrado. Este exercício prático demonstrou como realizar uma operação de pesquisa básica e imprimir o resultado com base na presença ou ausência do elemento no array.



