Usando '.toList()'
Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 12 de 65.
Quando você usa métodos como map() e where() em uma lista, eles não retornam uma nova List - eles retornam um Iterable. Embora um Iterable contenha os dados transformados ou filtrados que você deseja, muitas vezes você precisa convertê-lo de volta em uma List para usar métodos e propriedades de lista familiares.
O método .toList() converte um Iterable de volta para um List. Esta conversão cria uma nova lista contendo todos os elementos do iterável, dando a você acesso a todas as operações de lista padrão com as quais você está acostumado.
List<String> words = ['apple', 'banana', 'cherry', 'date'];
// where() retorna um Iterable, não uma List
var longWordsIterable = words.where((word) => word.length > 5);
// Converte o Iterable para uma List
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList); // ['banana', 'cherry']Esta etapa de conversão é essencial quando você precisa realizar operações de lista adicionais em seus dados filtrados ou transformados. Sem o .toList(), você estaria trabalhando com um Iterable, que possui funcionalidades mais limitadas do que uma List completa.
Desafio
FácilCrie um programa que gerencie um sistema de recomendação de livros de uma biblioteca, filtrando os livros com base nas preferências de gênero e convertendo os resultados em um formato de lista adequado. Seu programa deve:
- Ler uma entrada de string representando o nome da biblioteca
- Ler múltiplas entradas de string representando os títulos dos livros (a entrada terminará quando você receber uma string vazia)
- Ler múltiplas entradas de string representando os gêneros dos livros correspondentes a cada título (a entrada terminará quando você receber uma string vazia)
- Ler uma entrada de string representando o gênero preferido para filtrar
- Usar o método
where()para filtrar os livros que correspondem ao gênero preferido - Usar o método
toList()para converter o iterável filtrado em uma lista adequada - Imprimir os resultados da recomendação no formato exato mostrado abaixo
Por exemplo, se o nome da biblioteca for "City Library", os livros forem "The Great Gatsby", "Dune", "Pride and Prejudice", "1984", os gêneros forem "Fiction", "Science Fiction", "Romance", "Fiction", e o gênero preferido for "Fiction", seu programa deve exibir:
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 readySe o nome da biblioteca for "School Library", os livros forem "Harry Potter", "Lord of the Rings", os gêneros forem "Fantasy", "Fantasy", e o gênero preferido for "Mystery", seu programa deve exibir:
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 readySe o nome da biblioteca for "Community Library", os livros forem "To Kill a Mockingbird", o gênero for "Classic", e o gênero preferido for "Classic", seu programa deve exibir:
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 readySeu programa deve usar o método where() para filtrar os livros, comparando seu gênero com o gênero preferido, e então usar o método toList() para converter o iterável resultante em uma lista. O iterável filtrado deve ser exibido no formato de parênteses, enquanto a lista final deve ser exibida no formato de colchetes.
Folha de consulta
Métodos como map() e where() retornam um Iterable, não uma List. Use .toList() para converter um Iterable de volta para uma List:
List<String> words = ['apple', 'banana', 'cherry', 'date'];
// where() retorna um Iterable, não uma List
var longWordsIterable = words.where((word) => word.length > 5);
// Converte o Iterable para uma List
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList); // ['banana', 'cherry']Essa conversão é essencial quando você precisa realizar operações de lista adicionais em dados filtrados ou transformados.
Experimente você mesmo
import 'dart:io';
void main() {
// Ler o nome da biblioteca
String? libraryName = stdin.readLineSync();
// Ler títulos de livros até encontrar uma string vazia
List<String> books = [];
while (true) {
String? book = stdin.readLineSync();
if (book == null || book.isEmpty) break;
books.add(book);
}
// Ler gêneros de livros até encontrar uma string vazia
List<String> genres = [];
while (true) {
String? genre = stdin.readLineSync();
if (genre == null || genre.isEmpty) break;
genres.add(genre);
}
// Ler o gênero preferido
String? preferredGenre = stdin.readLineSync();
// TODO: Escreva seu código abaixo
// Use o método where() para filtrar os livros pelo gênero preferido
// Use o método toList() para converter o iterável filtrado em uma lista
// Imprimir os resultados no formato exigido
print('Library: $libraryName');
print('All books: $books');
print('All genres: $genres');
print('Filtering by genre: $preferredGenre');
// Imprimir livros filtrados (iterável) e livros recomendados (lista)
// Imprimir o total de recomendações e o status
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos