Menu
CoddyTech

Menggunakan '.toList()'

Termasuk bagian Logika dan Alur dalam perjalanan Dart di Coddy. Pelajaran 12 dari 65.

Saat menggunakan method seperti map() dan where() pada list, method tersebut tidak mengembalikan List baru, tetapi mengembalikan Iterable. Meskipun Iterable berisi data yang sudah ditransformasi atau difilter sesuai keinginanmu, kamu sering perlu mengubahnya kembali menjadi List agar bisa menggunakan method dan property list yang sudah familier.

method .toList() mengonversi Iterable kembali menjadi List. Konversi ini membuat list baru yang berisi semua elemen dari iterable, sehingga kamu bisa menggunakan semua operasi list standar yang biasa kamu gunakan.

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

// where() menghasilkan Iterable, bukan List
var longWordsIterable = words.where((word) => word.length > 5);

// Ubah Iterable menjadi List
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList);  // ['banana', 'cherry']

Langkah konversi ini penting saat kamu perlu melakukan operasi list tambahan pada data yang telah difilter atau ditransformasi. Tanpa .toList(), kamu akan bekerja dengan Iterable, yang fungsinya lebih terbatas daripada List lengkap.

challenge icon

Tantangan

Mudah

Buat program yang mengelola sistem rekomendasi buku perpustakaan dengan memfilter buku berdasarkan preferensi genre dan mengonversi hasilnya ke format list yang sesuai. Programmu harus:

  1. Membaca input string yang berisi nama perpustakaan
  2. Membaca beberapa input string yang berisi judul buku (input berakhir saat kamu menerima string kosong)
  3. Membaca beberapa input string yang berisi genre buku yang sesuai dengan setiap judul (input berakhir saat kamu menerima string kosong)
  4. Membaca input string yang berisi genre pilihan untuk digunakan sebagai filter
  5. Menggunakan method where() untuk memfilter buku yang cocok dengan genre pilihan
  6. Menggunakan method toList() untuk mengonversi iterable yang telah difilter menjadi list yang sesuai
  7. Mencetak hasil rekomendasi dalam format persis seperti yang ditunjukkan di bawah

Misalnya, jika nama perpustakaannya adalah "City Library", bukunya adalah "The Great Gatsby", "Dune", "Pride and Prejudice", "1984", genrenya adalah "Fiction", "Science Fiction", "Romance", "Fiction", dan genre pilihannya adalah "Fiction", programmu harus menghasilkan output berikut:

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

Jika nama perpustakaannya adalah "School Library", bukunya adalah "Harry Potter", "Lord of the Rings", genrenya adalah "Fantasy", "Fantasy", dan genre pilihannya adalah "Mystery", programmu harus menghasilkan output berikut:

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

Jika nama perpustakaannya adalah "Community Library", bukunya adalah "To Kill a Mockingbird", genrenya adalah "Classic", dan genre pilihannya adalah "Classic", programmu harus menghasilkan output berikut:

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

Programmu harus menggunakan method where() untuk memfilter buku dengan mencocokkan genrenya dengan genre pilihan, lalu menggunakan method toList() untuk mengonversi iterable hasilnya menjadi list. Iterable yang telah difilter harus ditampilkan dalam format tanda kurung, sedangkan list akhir harus ditampilkan dalam format tanda kurung siku.

Coba sendiri

import 'dart:io';

void main() {
  // Baca nama library
  String? libraryName = stdin.readLineSync();
  
  // Baca judul buku hingga menemukan string kosong
  List<String> books = [];
  while (true) {
    String? book = stdin.readLineSync();
    if (book == null || book.isEmpty) break;
    books.add(book);
  }
  
  // Baca genre buku hingga menemukan string kosong
  List<String> genres = [];
  while (true) {
    String? genre = stdin.readLineSync();
    if (genre == null || genre.isEmpty) break;
    genres.add(genre);
  }
  
  // Baca genre yang disukai
  String? preferredGenre = stdin.readLineSync();
  
  // TODO: Tulis kodemu di bawah ini
  // Gunakan method where() untuk memfilter buku berdasarkan genre yang disukai
  // Gunakan method toList() untuk mengubah iterable yang telah difilter menjadi list
  
  // Cetak hasilnya dalam format yang diminta
  print('Library: $libraryName');
  print('All books: $books');
  print('All genres: $genres');
  print('Filtering by genre: $preferredGenre');
  // Cetak buku yang telah difilter (iterable) dan buku yang direkomendasikan (list)
  // Cetak jumlah rekomendasi dan status
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Dart online