1. Imagine que você tem uma lista de strings. Algumas das strings são números, mas outras não. Queremos converter a lista de strings para uma lista de números. Se a conversão falhar, você deve ignorar o valor. Por exemplo, na lista a seguir, a saída deve ser [10, 20]:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
List<String> input = Arrays.asList("10", "abc", "20", "30x");
System.out.println(converterLista(input));
}
public static List<Integer> converterLista(List<String> input) {
return input.stream().map(str -> {
try {
return Optional.of(Integer.parseInt(str));
} catch (NumberFormatException e) {
return Optional.<Integer>empty();
}
}).filter(Optional::isPresent).map(Optional::get).toList();
}
}
2. Implemente um método que recebe um número inteiro dentro de um Optional. Se o número estiver presente e for positivo, calcule seu quadrado. Caso contrário, retorne Optional.empty.
import java.util.Optional;
public class Main {
public static void main(String[] args) {
System.out.println(processaNumero(Optional.of(5))); // Saída: Optional[25]
System.out.println(processaNumero(Optional.of(-3))); // Saída: Optional.empty
System.out.println(processaNumero(Optional.empty())); // Saída: Optional.empty
}
public static Optional<Integer> processaNumero(Optional<Integer> numero) {
return numero.filter(n -> n > 0).map(n -> n * n);
}
}
3. Implemente um método que recebe uma String representando um nome completo separado por espaços. O método deve retornar o primeiro e o último nome após remover os espaços desnecessários.
public class Main {
public static void main(String[] args) {
System.out.println(obterPrimeiroEUltimoNome(" Harlen Regis da Silva Lima ")); // Saída: "Harlen Lima"
System.out.println(obterPrimeiroEUltimoNome("Maria ")); // Saída: "Maria"
}
public static String obterPrimeiroEUltimoNome(String nomeCompleto) {
String[] nomes = nomeCompleto.trim().split("\\s+");
if (nomes.length == 1) {
return nomes[0]; // Apenas um nome
}
return nomes[0] + " " + nomes[nomes.length - 1]; // Primeiro e último
}
}
4. Implemente um método que verifica se uma frase é um palíndromo. Um palíndromo é uma palavra/frase que, quando lida de trás pra frente, é igual à leitura normal. Um exemplo:
public class Main {
public static void main(String[] args) {
System.out.println(ehPalindromo("Olá, tudo bem?")); // Saída: false
System.out.println(ehPalindromo("ala")); // Saída: true
}
public static boolean ehPalindromo(String palavra) {
String semEspacos = palavra.replace(" ", "").toLowerCase();
return new StringBuilder(semEspacos).reverse().toString().equalsIgnoreCase(semEspacos);
}
}
5. Implemente um método que recebe uma lista de e-mails (String) e retorna uma nova lista onde cada e-mail está convertido para letras minúsculas.
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> emails = Arrays.asList("TESTE@EXEMPLO.COM", "exemplo@Java.com ", "Usuario@teste.Com");
System.out.println(converterEmails(emails));
// Saída: ["teste@exemplo.com", "exemplo@java.com", "usuario@teste.com"]
}
public static List<String> converterEmails(List<String> emails) {
return emails.stream()
.map(email -> email.trim().toLowerCase())
.toList();
}
}
6. Crie um enum Mes que represente os meses do ano. Adicione um método que retorna o número de dias de cada mês, considerando anos não bissextos.
public static void main(String[] args) {
enum Mes {
JANEIRO(31), FEVEREIRO(28), MARCO(31), ABRIL(30),
MAIO(31), JUNHO(30), JULHO(31), AGOSTO(31),
SETEMBRO(30), OUTUBRO(31), NOVEMBRO(30), DEZEMBRO(31);
private int dias;
Mes(int dias) {
this.dias = dias;
}
public int getNumeroDeDias() {
return dias;
}
}
System.out.println("Fevereiro: " + Mes.FEVEREIRO.getNumeroDeDias()); // 28
System.out.println("Julho: " + Mes.JULHO.getNumeroDeDias()); // 31
}