1
resposta

Desafio: hora da prática

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
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi Harlen,

Excelente trabalho com os desafios! 👍

Vejo que você está explorando bem os recursos do Java com Streams e Optionals.

No primeiro desafio, a sua solução com map, filter e toList está correta e concisa.

No segundo desafio, a sua implementação do método processaNumero está perfeita! 💪 Você utilizou filter e map de forma eficaz para lidar com as condições do problema.

No terceiro desafio, a sua solução para obterPrimeiroEUltimoNome também está muito boa. 👏 A lógica de remover espaços extras com trim e split("\\s+") é a ideal.

Para saber mais: Documentação oficial do Java sobre Streams.

Continue praticando e explorando as funcionalidades do Java! 🤔