Menu
Coddy logo textTech

Utiliser '.toList()'

Fait partie de la section Logique & Flux du Journey Dart de Coddy — leçon 12 sur 65.

Lorsque vous utilisez des méthodes comme map() et where() sur une liste, elles ne retournent pas une nouvelle List - elles retournent un Iterable. Bien qu'un Iterable contienne les données transformées ou filtrées que vous souhaitez, vous avez souvent besoin de le reconvertir en une List pour utiliser les méthodes et propriétés de liste familières.

La méthode .toList() convertit un Iterable en une List. Cette conversion crée une nouvelle liste contenant tous les éléments de l'itérable, vous donnant accès à toutes les opérations de liste standard auxquelles vous êtes habitué.

List<String> words = ['apple', 'banana', 'cherry', 'date'];

// where() retourne un Iterable, pas une List
var longWordsIterable = words.where((word) => word.length > 5);

// Convertir l'Iterable en une List
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList);  // ['banana', 'cherry']

Cette étape de conversion est essentielle lorsque vous devez effectuer des opérations de liste supplémentaires sur vos données filtrées ou transformées. Sans .toList(), vous travailleriez avec un Iterable, qui possède des fonctionnalités plus limitées qu'une List complète.

challenge icon

Défi

Facile

Créez un programme qui gère un système de recommandation de livres de bibliothèque en filtrant les livres en fonction des préférences de genre et en convertissant les résultats dans un format de liste approprié. Votre programme doit :

  1. Lire une chaîne de caractères en entrée représentant le nom de la bibliothèque
  2. Lire plusieurs chaînes de caractères en entrée représentant les titres des livres (la saisie s'arrête lorsque vous recevez une chaîne vide)
  3. Lire plusieurs chaînes de caractères en entrée représentant les genres de livres correspondant à chaque titre (la saisie s'arrête lorsque vous recevez une chaîne vide)
  4. Lire une chaîne de caractères en entrée représentant le genre préféré pour le filtrage
  5. Utiliser la méthode where() pour filtrer les livres qui correspondent au genre préféré
  6. Utiliser la méthode toList() pour convertir l'itérable filtré en une liste appropriée
  7. Afficher les résultats de la recommandation dans le format exact indiqué ci-dessous

Par exemple, si le nom de la bibliothèque est "City Library", les livres sont "The Great Gatsby", "Dune", "Pride and Prejudice", "1984", les genres sont "Fiction", "Science Fiction", "Romance", "Fiction", et le genre préféré est "Fiction", votre programme doit afficher :

Library: City Library
All books: [The Great Gatsby, Dune, Pride and Prejudice, 1984]
All genres: [Fiction, Science Fiction, Romance, Fiction]
Filtering by genre: Fiction
Filtered books (iterable): (The Great Gatsby, 1984)
Recommended books (list): [The Great Gatsby, 1984]
Total recommendations: 2
Status: Recommendations ready

Si le nom de la bibliothèque est "School Library", les livres sont "Harry Potter", "Lord of the Rings", les genres sont "Fantasy", "Fantasy", et le genre préféré est "Mystery", votre programme doit afficher :

Library: School Library
All books: [Harry Potter, Lord of the Rings]
All genres: [Fantasy, Fantasy]
Filtering by genre: Mystery
Filtered books (iterable): ()
Recommended books (list): []
Total recommendations: 0
Status: Recommendations ready

Si le nom de la bibliothèque est "Community Library", le livre est "To Kill a Mockingbird", le genre est "Classic", et le genre préféré est "Classic", votre programme doit afficher :

Library: Community Library
All books: [To Kill a Mockingbird]
All genres: [Classic]
Filtering by genre: Classic
Filtered books (iterable): (To Kill a Mockingbird)
Recommended books (list): [To Kill a Mockingbird]
Total recommendations: 1
Status: Recommendations ready

Votre programme doit utiliser la méthode where() pour filtrer les livres en faisant correspondre leur genre avec le genre préféré, puis utiliser la méthode toList() pour convertir l'itérable résultant en une liste. L'itérable filtré doit être affiché au format parenthèses, tandis que la liste finale doit être affichée au format crochets.

Aide-mémoire

Des méthodes comme map() et where() retournent un Iterable, pas une List. Utilisez .toList() pour convertir un Iterable en une List :

List<String> words = ['apple', 'banana', 'cherry', 'date'];

// where() retourne un Iterable, pas une List
var longWordsIterable = words.where((word) => word.length > 5);

// Convertir l'Iterable en une List
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList);  // ['banana', 'cherry']

Cette conversion est essentielle lorsque vous devez effectuer des opérations de liste supplémentaires sur des données filtrées ou transformées.

Essayez vous-même

import 'dart:io';

void main() {
  // Lire le nom de la bibliothèque
  String? libraryName = stdin.readLineSync();
  
  // Lire les titres des livres jusqu'à une chaîne vide
  List<String> books = [];
  while (true) {
    String? book = stdin.readLineSync();
    if (book == null || book.isEmpty) break;
    books.add(book);
  }
  
  // Lire les genres de livres jusqu'à une chaîne vide
  List<String> genres = [];
  while (true) {
    String? genre = stdin.readLineSync();
    if (genre == null || genre.isEmpty) break;
    genres.add(genre);
  }
  
  // Lire le genre préféré
  String? preferredGenre = stdin.readLineSync();
  
  // TODO: Écrivez votre code ci-dessous
  // Utilisez la méthode where() pour filtrer les livres par genre préféré
  // Utilisez la méthode toList() pour convertir l'itérable filtré en liste
  
  // Afficher les résultats au format requis
  print('Library: $libraryName');
  print('All books: $books');
  print('All genres: $genres');
  print('Filtering by genre: $preferredGenre');
  // Afficher les livres filtrés (itérable) et les livres recommandés (liste)
  // Afficher le nombre total de recommandations et le statut
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux