Este projeto é mais um da série que faço, inspirado no #100DaysOfCode do Free Code Camp, com algumas adaptações minhas, realizando 100 dias de desafios de linguagens/frameworks específicos, como por exemplo:
Java é a minha linguagem de programação favorita, sendo aonde comecei no mundo da programação, aonde academicamente tenho 2 anos de XP e profissionalmente 1 ano com a mesma e a linguagem que trabalho no momento. Reforçar o conhecimento sobre algo que você utiliza diariamente e ter uma base é essencial para a evoluiçaõ profissional, então mesmo alguns desafios sendo simples, são indispensaveis e muitas vezes ficamos muito presos aos frameworks e esquecemos da base com recursos como Threads, Gerenciamento de Memoria e outros conceitos.
| Dia | Desafio | Recursos | Status |
|---|---|---|---|
| 1 | Gerando um número aleatório dentro de uma faixa específica. | - | ✅ |
| 2 | Formatando um objeto LocalDateTime. | - | ✅ |
| 3 | Removendo itens de uma Lista. | - | ✅ |
| 4 | Agendando uma tarefa para ser executada a cada 2 segundos. | ScheduledExecutorService, Executors | ✅ |
| 5 | Criando uma lista com itens filtrados de outras listas. | - | ✅ |
| 6 | Executando uma tarefa de forma assíncrona. | - | ✅ |
| 7 | Formatando uma mensagem usando MessageFormat. | MessageFormat | ✅ |
| 8 | Criando um pool de threads para executar tarefas simultaneamente e reutilizar threads. | - | ✅ |
| 9 | Criando um Enum valorizado. | - | ✅ |
| 10 | Ordenando um java.util.Map pelos seus valores. | Map, streams | ✅ |
| 11 | Invertendo uma String. | - | ✅ |
| 12 | Utilizando Callable e Future para executar tarefas em paralelo. | Callable, Future | ✅ |
| 13 | Juntando Strings. | - | ✅ |
| 14 | Dividindo Strings. | - | ✅ |
| 15 | Padrão Builder. | - | ✅ |
| 16 | Criando um Singleton inicializado de forma preguiçosa. | - | ✅ |
| 17 | Nunca passe um double como argumento ao construir objetos BigDecimal. | - | ✅ |
| 18 | Encontrando o valor máximo de uma Coleção. | Collections | ✅ |
| 19 | Uma implementação de Map que mantém os elementos na mesma ordem que foram inseridos. | LinkedHashMap | ✅ |
| 20 | Listar todas as fontes do seu sistema. | GraphicsEnvironment | ✅ |
| 21 | Mapeando e reduzindo de uma Lista. | - | ✅ |
| 22 | Executando comandos do sistema operacional. | ProcessBuilder, Process | ✅ |
| 23 | Transformar um array de Enum em um array de String. | Arrays | ✅ |
| 24 | Descobrindo o gasto de memoria da JVM. | Runtime | ✅ |
| 25 | Correspondência de padrões para instanceof no JDK 16. | - | ✅ |
| 26 | Utilizando Optional quando null é um valor de retorno válido. | Optional | ✅ |
| 27 | Criando uma String a partir de uma Lista: um item por linha. | - | ✅ |
| 28 | Ordenando uma Lista por um atributo específico. | - | ✅ |
| 29 | Criando Strings de várias linhas. | - | ✅ |
| 30 | Convertendo um Stream para Lista no JDK 16. | - | ✅ |
| 31 | Utilizando switch para retornar um valor. | - | ✅ |
| 32 | Começando a usar o Optional#orElseThrow em vez de Optional#get. | Optional | ✅ |
| 33 | Utilizando um bloco de código estaticamente. | - | ✅ |
| 34 | Imprimindo informações sobre todos os processos Java em execução na máquina. | - | ✅ |
| 35 | Recursos de autoclosing (try-with-resources). | - | ✅ |
| 36 | Utilizando Objects.requireNonNullElse quando Optional não é uma opção. | Objects | ✅ |
| 37 | Compreendendo os Operadores de Prefixo (i) e Sufixo (i). | - | ✅ |
| 38 | Utilizando uma Matriz para percorrer valores. | - | ✅ |
| 39 | Fornecendo um valor padrão em caso de timeout ao executar uma tarefa assíncrona. | - | ✅ |
| 40 | Filtrando um Stream usando Predicate#not. | Predicate | ✅ |
| 41 | Crie uma unmodifiableList usando Collections. | Collections | ✅ |
| 42 | Indentando uma String. | - | ✅ |
| 43 | Utilizando StringJoiner. | StringJoiner | ✅ |
| 44 | Formatando Strings com java.lang.String#formatted. | String | ✅ |
| 45 | Utilizando java.util.Comparator#comparing para ordenar uma Lista. | Comparator | ✅ |
| 46 | Utilizando Function para mapear uma Lista de um tipo para outro. | Function | ✅ |
| 47 | Criando uma Interface Funcional. | FunctionalInterface | ✅ |
| 48 | Function#identity: Criando uma função que sempre retorna seu argumento de entrada. | Function | ✅ |
| 49 | Não se repita: Reutilizando funções com Function#andThen. | Function | ✅ |
| 50 | Criando um Stream a partir de um intervalo de Integers. | Stream | ✅ |
| 51 | Utilizando UnaryOperator. | UnaryOperator | ✅ |
| 52 | Tornando IOException não verificada. | IOException | ✅ |
| 53 | Utilizando Supplier para executar uma criação de objeto cara apenas quando e se necessário. | Supplier | ✅ |
| 54 | Computando valores de um Map se ausentes. | Map | ✅ |
| 55 | Imprimindo caracteres coloridos no console. | ANSI Colors | ✅ |
| 56 | Converter uma String em uma lista de Long. | - | ✅ |
| 57 | Gerando um Stream infinito. | Stream | ✅ |
| 58 | Utilizando um Predicate. | Predicate | ✅ |
| 59 | Encadeando Predicates. | Predicate | ✅ |
| 60 | Particionando um Stream por um Predicate. | Predicate | ✅ |
| 61 | Utilizando EnumMap Quando a Chave do Seu Mapa é um Enum. | EnumMap | ✅ |
| 62 | Utilizando java.util.function.Consumer. | Consumer | ✅ |
| 63 | Utilizando Classes Seladas do JDK 17. | Sealed Classes | ✅ |
| 64 | Transforme uma variavel em todos os tipos de wrappers que herdam de Number. | - | ✅ |
| 65 | Reduzindo a verbosidade de Generics com Diamond Operators. | Generics | ✅ |
| 66 | Criando uma Function genérica. | Function | ✅ |
| 67 | Criando uma Interface de some e chamar seu método com um lambda. | - | ✅ |
| 68 | Encontrando a frequência de um elemento em uma Lista. | Collections | ✅ |
| 69 | Utilizando Method Reference e lambda. | - | ✅ |
| 70 | Utilizando o padrão Builder para criar um Objeto. | - | ✅ |
| 71 | Criar uma chain of responsability usando interface. | - | ✅ |
| 72 | Utilizando a palavra reservada synchronized. | synchronized | ✅ |
| 73 | Utilizar CompletableFuture para criar uma task | CompletableFuture | ✅ |
| 74 | Utilizando Reactive Streams a partir do Java 9. | Reactive Streams | ✅ |
| 75 | Removendo elementos duplicados de uma Lista. | Collections | ✅ |
| 76 | Somando os elementos de uma Lista. | Collections | ✅ |
| 77 | Sempre fazer o cast dos operandos Math antes da atribuição. | - | ✅ |
| 78 | Criando um array bidimensional. | - | ✅ |
| 79 | Trabalhando com LocalDate e LocalTime. | LocalDate, LocalTime | ✅ |
| 80 | Manipulando arquivos com a classe File. | File | ✅ |
| 81 | Lendo e escrevendo em arquivos com a classe Files. | Files | ✅ |
| 82 | Trabalhando com Path e Paths para manipulação de arquivos. | Path, Paths | ✅ |
| 83 | Utilizando a classe Scanner para ler entrada do usuário. | Scanner | ✅ |
| 84 | Trabalhando com expressões regulares e a classe Pattern. | Pattern | ✅ |
| 85 | Criando e manipulando conjuntos com a classe Set. | Set | ✅ |
| 86 | Trabalhando com filas usando a interface Queue. | Queue | ✅ |
| 87 | Utilizando a classe Stack para criar uma pilha. | Stack | ✅ |
| 88 | Trabalhando com datas e horas usando a classe ZonedDateTime. | ZonedDateTime | ✅ |
| 89 | Criando e manipulando mapas com a classe TreeMap. | TreeMap | ✅ |
| 90 | Trabalhando com a classe Random para gerar números aleatórios. | Random | ✅ |
| 91 | Criando e manipulando listas com a classe LinkedList. | LinkedList | ✅ |
| 92 | Trabalhando com a classe StringBuilder para manipular strings. | StringBuilder | ✅ |
| 93 | Utilizando a classe Math para realizar operações matemáticas. | Math | ✅ |
| 94 | Trabalhando com a classe BigInteger para números inteiros de tamanho arbitrário. | BigInteger | ✅ |
| 95 | Utilizando a classe BigDecimal para números decimais de precisão arbitrária. | BigDecimal | ✅ |
| 96 | Trabalhando com a classe AtomicInteger para operações atômicas em inteiros. | AtomicInteger | ✅ |
| 97 | Utilizando a classe AtomicReference para operações atômicas em referências. | AtomicReference | ✅ |
| 98 | Trabalhando com a classe OptionalDouble para valores double opcionais. | OptionalDouble | ✅ |
| 99 | Utilizando a classe Timer para agendar tarefas. | Timer | ✅ |
| 100 | Comarando o Desempenho de uma ArrayList vs LinkedList. | List | ✅ |
