Menu
Coddy logo textTech

Uso de '.toList()'

Parte de la sección Lógica y Flujo del Journey de Dart de Coddy. Lección 12 de 65.

Cuando usas métodos como map() y where() en una lista, no devuelven una nueva List; devuelven un Iterable. Aunque un Iterable contiene los datos transformados o filtrados que deseas, a menudo necesitas convertirlo de nuevo en una List para usar los métodos y propiedades de lista familiares.

El método .toList() convierte un Iterable de nuevo en una List. Esta conversión crea una nueva lista que contiene todos los elementos del iterable, lo que te da acceso a todas las operaciones estándar de las listas a las que estás acostumbrado.

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

// where() devuelve un Iterable, no una List
var longWordsIterable = words.where((word) => word.length > 5);

// Convierte el Iterable en una List
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList);  // ['banana', 'cherry']

Este paso de conversión es esencial cuando necesitas realizar operaciones de lista adicionales en tus datos filtrados o transformados. Sin .toList(), estarías trabajando con un Iterable, que tiene una funcionalidad más limitada que una List completa.

challenge icon

Desafío

Fácil

Crea un programa que gestione un sistema de recomendaciones de libros de una biblioteca filtrando los libros según las preferencias de género y convirtiendo los resultados en un formato de lista adecuado. Tu programa debe:

  1. Leer una entrada de tipo cadena que represente el nombre de la biblioteca
  2. Leer varias entradas de tipo cadena que representen los títulos de los libros (la entrada terminará cuando recibas una cadena vacía)
  3. Leer varias entradas de tipo cadena que representen los géneros de los libros correspondientes a cada título (la entrada terminará cuando recibas una cadena vacía)
  4. Leer una entrada de tipo cadena que represente el género preferido por el que se filtrará
  5. Usar el método where() para filtrar los libros que coincidan con el género preferido
  6. Usar el método toList() para convertir el iterable filtrado en una lista adecuada
  7. Imprimir los resultados de las recomendaciones exactamente en el formato que se muestra a continuación

Por ejemplo, si el nombre de la biblioteca es "City Library", los libros son "The Great Gatsby", "Dune", "Pride and Prejudice", "1984", los géneros son "Fiction", "Science Fiction", "Romance", "Fiction", y el género preferido es "Fiction", tu programa debe mostrar:

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 el nombre de la biblioteca es "School Library", los libros son "Harry Potter", "Lord of the Rings", los géneros son "Fantasy", "Fantasy", y el género preferido es "Mystery", tu programa debe mostrar:

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 el nombre de la biblioteca es "Community Library", el libro es "To Kill a Mockingbird", el género es "Classic" y el género preferido es "Classic", tu programa debe mostrar:

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

Tu programa debe usar el método where() para filtrar los libros haciendo coincidir su género con el género preferido y, después, usar el método toList() para convertir el iterable resultante en una lista. El iterable filtrado debe mostrarse con formato de paréntesis, mientras que la lista final debe mostrarse con formato de corchetes.

Pruébalo tú mismo

import 'dart:io';

void main() {
  // Leer el nombre de la biblioteca
  String? libraryName = stdin.readLineSync();
  
  // Leer títulos de libros hasta encontrar una cadena vacía
  List<String> books = [];
  while (true) {
    String? book = stdin.readLineSync();
    if (book == null || book.isEmpty) break;
    books.add(book);
  }
  
  // Leer géneros de libros hasta encontrar una cadena vacía
  List<String> genres = [];
  while (true) {
    String? genre = stdin.readLineSync();
    if (genre == null || genre.isEmpty) break;
    genres.add(genre);
  }
  
  // Leer el género preferido
  String? preferredGenre = stdin.readLineSync();
  
  // TODO: Escribe tu código abajo
  // Usa el método where() para filtrar libros por el género preferido
  // Usa el método toList() para convertir el iterable filtrado en una lista
  
  // Imprimir los resultados en el formato requerido
  print('Library: $libraryName');
  print('All books: $books');
  print('All genres: $genres');
  print('Filtering by genre: $preferredGenre');
  // Imprimir libros filtrados (iterable) y libros recomendados (lista)
  // Imprimir el total de recomendaciones y el estado
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Dart online