programmation Java (école d'ingénieur) · Chapitre 13 · Exercice de TD
Traduire
Lambdas et streams · niveau 2
Énoncé
- Traduire en un seul pipeline de stream la boucle suivante, qui calcule la somme des carrés des nombres pairs d'une liste
l:
int s = 0;
for (int x : l) if (x % 2 == 0) s += x * x;
- Traduire en boucle le pipeline suivant, et vérifier que les deux listes sont égales :
List<Integer> a = IntStream.range(1, 50).filter(x -> x % 7 == 0).boxed()
.sorted((x, y) -> Integer.compare(y, x)).collect(Collectors.toList());Corrigé
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Exo7Traduire {
public static void main(String[] args) {
List<Integer> l = List.of(4, 7, 10, 3, 8, 15);
// 1. boucle -> stream : somme des carrés des nombres pairs
int s1 = 0;
for (int x : l) if (x % 2 == 0) s1 += x * x;
int s2 = l.stream().filter(x -> x % 2 == 0).mapToInt(x -> x * x).sum();
System.out.println(s1 + " " + s2);
// 2. stream -> boucle : les multiples de 7 inférieurs à 50, à l'envers
List<Integer> a = IntStream.range(1, 50).filter(x -> x % 7 == 0).boxed()
.sorted((x, y) -> Integer.compare(y, x)).collect(Collectors.toList());
List<Integer> b = new ArrayList<>();
for (int x = 49; x >= 1; x--) if (x % 7 == 0) b.add(x);
System.out.println(a + " " + a.equals(b));
}
}
180 180
[49, 42, 35, 28, 21, 14, 7] true
- Le test devient un
filter, le carré unmapToInt(qui donne unIntStream), l'accumulation unsum(). Avec la liste : . IntStream.range(1, 50)parcourt ;boxed()passe desintauxInteger; le tri par ordre décroissant se traduit simplement par une boucle qui descend.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.