diff --git a/src/stream_api/Desafio1.java b/src/stream_api/Desafio1.java new file mode 100644 index 0000000..f69e414 --- /dev/null +++ b/src/stream_api/Desafio1.java @@ -0,0 +1,22 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio1 { + + public static void main(String[] args) { + + /* + * - Desafio 1 - Mostre a lista na ordem numérica: + Crie um programa que utilize a Stream API para ordenar a lista de números em ordem crescente e a exiba no console. + */ + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + numeros.stream() + .sorted() + .forEach(numerosOrdenados -> System.out.println(String.format("Ordem numérica: %d", numerosOrdenados))); + + } +} diff --git a/src/stream_api/Desafio10.java b/src/stream_api/Desafio10.java new file mode 100644 index 0000000..39f41a1 --- /dev/null +++ b/src/stream_api/Desafio10.java @@ -0,0 +1,26 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio10 { + + public static void main(String[] args) { + + /*- Desafio 10 - Agrupe os valores ímpares múltiplos de 3 ou de 5: + + Utilize a Stream API para agrupar os valores ímpares múltiplos de 3 ou de 5 e exiba o resultado no console. */ + + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + List multiplos = numeros.stream() + .filter(n -> n %3 == 0 || n %5 == 0) + .toList(); + + System.out.println("Números múltiplos de 3 ou 5: " + multiplos); + + } + + +} diff --git a/src/stream_api/Desafio11.java b/src/stream_api/Desafio11.java new file mode 100644 index 0000000..b89177a --- /dev/null +++ b/src/stream_api/Desafio11.java @@ -0,0 +1,38 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; +//import java.util.stream.Collector; + +public class Desafio11 { + + public static void main(String[] args) { + + /* + * - Desafio 11 - Encontre a soma dos quadrados de todos os números da lista: + Utilizando a Stream API, encontre a soma dos quadrados de todos os números da lista e exiba o resultado no console. + + */ + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + Integer quadrados = numeros.stream() + .mapToInt(n -> n * n).sum(); + + System.out.println("A soma dos quadrados é: " + quadrados); + + // OUTRA MANEIRA + /*List quadrados = numeros.stream() + .map(n -> n * n) + .toList(); + + Integer soma = quadrados.stream() + .reduce(0, (a, b) -> a + b); + + System.out.println("A soma dos quadrados é: " + soma);*/ + + + } + + +} diff --git a/src/stream_api/Desafio12.java b/src/stream_api/Desafio12.java new file mode 100644 index 0000000..cefcac8 --- /dev/null +++ b/src/stream_api/Desafio12.java @@ -0,0 +1,25 @@ +package stream_api; + + +import java.util.Arrays; +import java.util.List; + +public class Desafio12 { + + public static void main(String[] args) { + + + /*- Desafio 12 - Encontre o produto de todos os números da lista: +Com a ajuda da Stream API, encontre o produto de todos os números da lista e exiba o resultado no console. */ + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + Long produto = numeros.stream() + .mapToLong(x -> x.longValue()) + .reduce(1L,(a, b) -> a * b); + + + System.out.println("O produto dos números é: " + produto); + +} +} diff --git a/src/stream_api/Desafio13.java b/src/stream_api/Desafio13.java new file mode 100644 index 0000000..e91dee9 --- /dev/null +++ b/src/stream_api/Desafio13.java @@ -0,0 +1,24 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio13 { + + + public static void main(String[] args) { + + /*- Desafio 13 - Filtrar os números que estão dentro de um intervalo: + +Utilize a Stream API para filtrar os números que estão dentro de um intervalo específico (por exemplo, entre 5 e 10) e exiba o resultado no console. */ + + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + List intervalo = numeros.stream() + .filter(n -> n > 5 && n < 10) + .toList(); + + System.out.println("Números no intervalo de 5 a 10: " + intervalo); + } +} diff --git a/src/stream_api/Desafio14.java b/src/stream_api/Desafio14.java new file mode 100644 index 0000000..00c1485 --- /dev/null +++ b/src/stream_api/Desafio14.java @@ -0,0 +1,94 @@ +package stream_api; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.stream.IntStream; + +public class Desafio14 { + + public static void main(String[] args) { + + /*- Desafio 14 - Encontre o maior número primo da lista: + Com a Stream API, encontre o maior número primo da lista e exiba o resultado no console. */ + + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + + Optional maiorPrimo = numeros.stream() + .filter(numero -> ehPrimo(numero)) // filtra apenas os números primos + .max(Comparator.naturalOrder()); // pega o maior deles + + + if (maiorPrimo.isPresent()) { + System.out.println("Maior número primo: " + maiorPrimo.get()); + } else { + System.out.println("Nenhum número primo encontrado na lista."); + } + } + + + + public static boolean ehPrimo(int numero) { + if (numero <= 1) return false; // verifica se é maior que 1 + + // Gera os números de 2 até a raiz quadrada do numero + // e verifica se algum divide o numero + return IntStream.rangeClosed(2, (int) Math.sqrt(numero)) + .noneMatch(i -> numero % i == 0); // se nenhum dividir, é primo + + + } +} + +/*IntStream.rangeClosed(inicio, fim) -gera uma sequência de números inteiros + .noneMatch: É um método de terminal da Stream API que retorna: + true se nenhum elemento da stream atender a condição. + false se algum elemento atender. +*/ + +/*-------------------------------------------- */ +/*"Se nenhum número de 2 até √numero for divisor de numero, então o numero é primo." + * Math.sqrt(2) ≈ 1.41 ≈ 1 + * Math.sqrt(3) ≈ 1.73 ≈ 1 + * + * Como o range começa em 2, 1 < 2, vai retornar vazio -> true + * + * Math.sqrt(4) = 2 -> IntStream.rangeClosed(2, 2) -> 4 % 2 == 0, então não é primo -> false + * Math.sqrt(5) ≈ 2.24 -> IntStream.rangeClosed(2, 2) -> 4 % 2 != 0, então é primo -> true + * ... + */ + + +/*-------------------------------------------- */ + + +/* + * public static boolean isPrimo(int n) { + // Obtém o valor absoluto do número para garantir que seja positivo + n = Math.abs(n); + + // Verifica se o número é menor ou igual a 1, caso contrário, não é primo + if (n <= 1) { + return false; + } + + // Faz um loop de 2 até a raiz quadrada do número + for (int i = 2; i * i <= n; i++) { + // Se o número for divisível por algum valor no intervalo, não é primo + if (n % i == 0) { + return false; + } + } + + // Se não foi encontrado divisor no loop, o número é primo + return true; +} +} + * + * + * + * + */ \ No newline at end of file diff --git a/src/stream_api/Desafio15.java b/src/stream_api/Desafio15.java new file mode 100644 index 0000000..aca45b0 --- /dev/null +++ b/src/stream_api/Desafio15.java @@ -0,0 +1,24 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio15 { + + public static void main(String[] args) { + + /* - Desafio 15 - Verifique se a lista contém pelo menos um número negativo: + +Utilizando a Stream API, verifique se a lista contém pelo menos um número negativo e exiba o resultado no console. +*/ + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + boolean negativo = numeros.stream() + .anyMatch(n -> n < 0); + + System.out.println("Existem números negativos? " + negativo); + + +} +} diff --git a/src/stream_api/Desafio16.java b/src/stream_api/Desafio16.java new file mode 100644 index 0000000..99aae47 --- /dev/null +++ b/src/stream_api/Desafio16.java @@ -0,0 +1,30 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio16 { + + public static void main(String[] args) { + /*- Desafio 16 - Agrupe os números em pares e ímpares: + + Utilize a Stream API para agrupar os números em duas listas separadas, + uma contendo os números pares e outra contendo os números ímpares da lista original, + e exiba os resultados no console. */ + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + List pares = numeros.stream() + .filter(n -> n % 2 == 0) + .toList(); + + List impares = numeros.stream() + .filter(n -> n % 2 != 0) + .toList(); + + System.out.println("Números pares: " + pares); + System.out.println("Números ímpares: " + impares); + + } + +} diff --git a/src/stream_api/Desafio17.java b/src/stream_api/Desafio17.java new file mode 100644 index 0000000..ceca3df --- /dev/null +++ b/src/stream_api/Desafio17.java @@ -0,0 +1,30 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.IntStream; + +public class Desafio17 { + + public static void main(String[] args) { + + /*- Desafio 17 - Filtrar os números primos da lista: +Com a ajuda da Stream API, filtre os números primos da lista e exiba o resultado no console. */ + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + List primos = numeros.stream() + .filter(numero -> ehPrimo(numero)) + .toList(); + + System.out.println("Lista de números primos: " + primos); + + } + // Método: explicação desafio 14 + public static boolean ehPrimo(int numero) { + if (numero <= 1) return false; // verifica se é maior que 1 + + + return IntStream.rangeClosed(2, (int) Math.sqrt(numero)) + .noneMatch(i -> numero % i == 0); // se nenhum dividir, é primo + } +} diff --git a/src/stream_api/Desafio18.java b/src/stream_api/Desafio18.java new file mode 100644 index 0000000..7632619 --- /dev/null +++ b/src/stream_api/Desafio18.java @@ -0,0 +1,33 @@ +package stream_api; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + + +public class Desafio18 { + + public static void main(String[] args) { + + /* - Desafio 18 - Verifique se todos os números da lista são iguais: + Utilizando a Stream API, verifique se todos os números da lista são iguais + e exiba o resultado no console. */ + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + Set setNumeros = new HashSet<>(); // set: eliminar repetições + List numerosRepetidos = numeros.stream() // percorre toda a lista + .filter(n -> !setNumeros.add(n)) // compara o set com a lista original + .toList(); // adiciona à nova lista os números repetidos + System.out.println("Números repetidos: " + numerosRepetidos); + +/* + if (setNumeros.size() == 1) { // é 1 porque set só permite um único valor + System.out.println("Todos os números da lista são iguais."); + } else { + System.out.println("Nem todos os números da lista são iguais."); + }*/ + + } + +} diff --git a/src/stream_api/Desafio19.java b/src/stream_api/Desafio19.java new file mode 100644 index 0000000..ff43c12 --- /dev/null +++ b/src/stream_api/Desafio19.java @@ -0,0 +1,27 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio19 { + + public static void main(String[] args) { + + /*- Desafio 19 - Encontre a soma dos números divisíveis por 3 e 5: + + Com a Stream API, encontre a soma dos números da lista que são divisíveis tanto por 3 quanto por 5 e exiba o resultado no console. */ + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + List divisivel = numeros.stream() + .filter(n -> n % 3 == 0 && n %5 == 0) + .toList(); + + int soma = divisivel.stream() + .reduce(0, (a, b) -> a + b); + + + System.out.println("Divisível de 3 e 5 (15): " + divisivel); + System.out.println("Soma: " + soma); + + } +} diff --git a/src/stream_api/Desafio2.java b/src/stream_api/Desafio2.java new file mode 100644 index 0000000..01eb4e1 --- /dev/null +++ b/src/stream_api/Desafio2.java @@ -0,0 +1,27 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio2 { + + public static void main(String[] args) { + + /*- Desafio 2 - Imprima a soma dos números pares da lista: + Utilizando a Stream API, realize a soma dos números pares da lista e exiba o resultado no console. + */ + + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + + int somaPares = numeros.stream() + .filter(n -> n % 2 == 0) // filtrar os números pares + .reduce (0, (n1, n2) -> n1 + n2); // soma os números pares + + System.out.println(somaPares); + + } + + +} diff --git a/src/stream_api/Desafio3.java b/src/stream_api/Desafio3.java new file mode 100644 index 0000000..9883a83 --- /dev/null +++ b/src/stream_api/Desafio3.java @@ -0,0 +1,23 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio3 { + + public static void main(String[] args) { + + /*- Desafio 3 - Verifique se todos os números da lista são positivos: + Com a ajuda da Stream API, verifique se todos os números da lista são positivos e exiba o resultado no console. */ + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + boolean todosPositivos = numeros.stream() + .allMatch(n -> n > 0); + + System.out.println(todosPositivos); + + + } + +} diff --git a/src/stream_api/Desafio4.java b/src/stream_api/Desafio4.java new file mode 100644 index 0000000..27c8a20 --- /dev/null +++ b/src/stream_api/Desafio4.java @@ -0,0 +1,24 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +import java.util.stream.Collectors; + +public class Desafio4 { + + public static void main(String[] args) { + + // - Desafio 4 - Remova todos os valores ímpares: +//Utilize a Stream API para remover os valores ímpares da lista e imprima a lista resultante no console. + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + + List semNumeroImpar = numeros.stream() + .filter(n -> n %2 == 0) + .collect(Collectors.toList()); + + System.out.println(semNumeroImpar); + } +} diff --git a/src/stream_api/Desafio5.java b/src/stream_api/Desafio5.java new file mode 100644 index 0000000..f5e6447 --- /dev/null +++ b/src/stream_api/Desafio5.java @@ -0,0 +1,29 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + + +public class Desafio5 { + + public static void main(String[] args) { + + /*- Desafio 5 - Calcule a média dos números maiores que 5: + Com a Stream API, calcule a média dos números maiores que 5 e exiba o resultado no console. */ + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + + double media = numeros.stream() + .filter(n -> n > 5) + .mapToDouble(x -> x.doubleValue()) // converte Integer para Double + .average() + .orElse(0.0); + + + + System.out.println("A média dos valores maiores que 5 é: " + media); + + } + +} diff --git a/src/stream_api/Desafio6.java b/src/stream_api/Desafio6.java new file mode 100644 index 0000000..b7a40bc --- /dev/null +++ b/src/stream_api/Desafio6.java @@ -0,0 +1,22 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio6 { + + public static void main(String[] args) { + + // - Desafio 6 - Verificar se a lista contém algum número maior que 10: + //Utilize a Stream API para verificar se a lista contém algum número maior que 10 e exiba o resultado no console. + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + boolean maiorQue10 = numeros.stream() + .anyMatch(n -> n > 10); + + System.out.println(maiorQue10); + } + + // não usa o método .allMatch porque este verifica se todos os elementos da stream satisfazem a condição fornecida. +} diff --git a/src/stream_api/Desafio7.java b/src/stream_api/Desafio7.java new file mode 100644 index 0000000..e451af5 --- /dev/null +++ b/src/stream_api/Desafio7.java @@ -0,0 +1,26 @@ +package stream_api; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +public class Desafio7 { + + public static void main(String[] args) { + + //- Desafio 7 - Encontrar o segundo número maior da lista: + //Com a ajuda da Stream API, encontre o segundo número maior da lista e exiba o resultado no console. + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + int segundoNumero = numeros.stream() + .sorted(Comparator.reverseOrder()) + .distinct() + .skip(1) + .findFirst() + .orElse(0); + + + System.out.println("O segundo maior número é: " + segundoNumero); + } +} diff --git a/src/stream_api/Desafio8.java b/src/stream_api/Desafio8.java new file mode 100644 index 0000000..5de4c8c --- /dev/null +++ b/src/stream_api/Desafio8.java @@ -0,0 +1,22 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; + +public class Desafio8 { + public static void main(String[] args) { + + // - Desafio 8 - Somar os dígitos de todos os números da lista: + //Utilizando a Stream API, realize a soma dos dígitos de todos os números da lista e exiba o resultado no console. + + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + Integer soma = numeros.stream() + .reduce(0, (numberA,numberB) -> numberA + numberB); + + System.out.println("Total da soma: " + soma); + + + } +} diff --git a/src/stream_api/Desafio9.java b/src/stream_api/Desafio9.java new file mode 100644 index 0000000..1f9c8fe --- /dev/null +++ b/src/stream_api/Desafio9.java @@ -0,0 +1,25 @@ +package stream_api; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class Desafio9 { + + public static void main(String[] args) { + + /*- Desafio 9 - Verificar se todos os números da lista são distintos (não se repetem): +Com a Stream API, verifique se todos os números da lista são distintos (não se repetem) e exiba o resultado no console. */ + + List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3); + + boolean todosDistintos = numeros.stream() + .collect(Collectors.toSet()) // pega todos os numeros da lista e coloca num Set, sem repetições + .size() == numeros.size(); // compara os tamanhos com a lista original. True se for igual + + System.out.println("Todos os números são distintos? " + todosDistintos); + + + +} +}