Restriction et Saut d'Éléments avec les Méthodes limit() et skip()
Glissez pour afficher le menu
L'API Stream de Java propose des méthodes pratiques pour manipuler des collections de données. Deux méthodes utiles, limit() et skip(), permettent de contrôler le nombre d'éléments traités dans un flux ou d'en ignorer un certain nombre, ce qui peut être utile pour optimiser les performances lors du traitement de grands ensembles de données.
Que sont ces méthodes ?
Main.java
1234567891011121314151617181920package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class Main { public static void main(String[] args) { List<String> products = Arrays.asList( "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12" ); // Limit processing to the first 10 items products.stream() .limit(10) .forEach(System.out::println); // Output: Item 1, Item 2, ..., Item 10 } }
Dans cet exemple, limit(10) est utilisé pour restreindre le flux aux 10 premiers éléments, garantissant que seuls ces éléments sont traités.
Main.java
1234567891011121314151617181920package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class Main { public static void main(String[] args) { List<String> products = Arrays.asList( "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12" ); // Skip the first 5 items and process the rest products.stream() .skip(5) // Skips the first 5 items .forEach(System.out::println); // Output: Item 6, Item 7, ..., Item 12 } }
Ici, skip(5) est utilisé pour ignorer les cinq premiers éléments et commencer le traitement à partir du sixième élément.
Exemple concret
Supposons que vous travaillez dans une usine avec une liste de 50 pièces à inspecter. Il est nécessaire de vérifier uniquement les 10 premières pièces, tandis qu'un autre spécialiste s'occupe du reste. Dans ce cas, vous pouvez utiliser limit(10).
Si les 20 premières pièces ont déjà été inspectées et que vous devez commencer à partir de la pièce 21, vous pouvez utiliser skip(20).
Voyons maintenant comment implémenter ce scénario en code.
Application pratique
Dans une usine, il est nécessaire de traiter des pièces. Vous disposez d'une liste de 50 pièces et devez ignorer les 20 premières, puis traiter les 10 suivantes.
Main.java
12345678910111213141516171819202122232425262728293031323334353637package com.example; import java.util.UUID; import java.util.function.Supplier; import java.util.stream.Stream; public class Main { public static void main(String[] args) { // Supplier for generating parts Supplier<Part> partSupplier = () -> new Part( (int) (Math.random() * 1000), "Part-" + UUID.randomUUID() ); // Create a stream of 50 parts, skip the first 20, and process the next 10 Stream.generate(partSupplier) .limit(50) // Limit the stream to 50 parts .skip(20) // Skip the first 20 .limit(10) // Process the next 10 .forEach(System.out::println); // Print the parts } } class Part { private int id; private String name; Part(int id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "Part{id=" + id + ", name='" + name + "'}"; } }
Dans ce code, un Supplier est utilisé pour créer dynamiquement des objets Part. La bibliothèque UUID permet de générer des identifiants uniques pour chaque pièce.
En utilisant Stream.generate(partSupplier), qui prend notre Supplier, un flux de pièces est créé, générant continuellement des éléments jusqu'à ce qu'il soit limité par limit(50).
Ensuite, skip(20) permet d'ignorer les 20 premières pièces, tandis que limit(10) traite uniquement les 10 pièces suivantes.
Cette approche permet une génération et un traitement efficaces des données sans avoir à stocker toute la liste en mémoire.
1. Que fait la méthode limit(n) dans un flux ?
2. Quelle interface est utilisée pour générer des éléments dans un flux avec Stream.generate() ?
3. Quelle méthode ignore les n premiers éléments d'un flux ?
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion