Zeffry Reynando
Zeffry Reynando

Reputation: 3899

filter List Object contains value

class Lesson {
  int idLesson;
  String nameLesson;
  List<DayLesson> dayLesson;
  Lesson({this.idLesson, this.dayLesson, this.nameLesson});
}

class DayLesson {
  int idDay;
  String nameDay;
  DayLesson({this.idDay, this.nameDay});
}

List<DayLesson> listDay = [
  DayLesson(idDay: 1, nameDay: 'Monday'),
  DayLesson(idDay: 2, nameDay: 'Tuesday'),
  DayLesson(idDay: 3, nameDay: 'Wednesday'),
  DayLesson(idDay: 4, nameDay: 'Thursday'),
  DayLesson(idDay: 5, nameDay: 'Friday'),
  DayLesson(idDay: 6, nameDay: 'Saturday'),
  DayLesson(idDay: 7, nameDay: 'Sunday'),
];

List<Lesson> listLesson = [
  Lesson(
    idLesson: 1,
    nameLesson: 'Matematic',
    dayLesson: [
      DayLesson(idDay: 1, nameDay: 'Monday'),
      DayLesson(idDay: 5, nameDay: 'Friday'),
    ],
  ),
  Lesson(
    idLesson: 2,
    nameLesson: 'Indonesia Language',
    dayLesson: [
      DayLesson(idDay: 2, nameDay: 'Tuesday'),
      DayLesson(idDay: 4, nameDay: 'Thursday'),
    ],
  ),
  Lesson(
    idLesson: 3,
    nameLesson: 'Chemistry',
    dayLesson: [
      DayLesson(idDay: 3, nameDay: 'Wednesday'),
    ],
  ),
  Lesson(
    idLesson: 4,
    nameLesson: 'Physics',
    dayLesson: [
      DayLesson(idDay: 4, nameDay: 'Thursday'),
      DayLesson(idDay: 5, nameDay: 'Friday'),
    ],
  ),
  Lesson(
    idLesson: 5,
    nameLesson: 'Basic Invesment',
    dayLesson: [
      DayLesson(idDay: 1, nameDay: 'Monday'),
    ],
  ),
];

In above code i have 2 class named Lesson and DayLesson. I want search in List<Lesson> where in this list contain day with ID X. Something like listLesson.where((element)=>element.dayLesson.contain(1)).toList().
My expectation with above example will return 2 data , because in listDay have ID with value 1 :

[
Lesson(
    idLesson: 1,
    nameLesson: 'Matematic',
    dayLesson: [
      DayLesson(idDay: 1, nameDay: 'Monday'),
      DayLesson(idDay: 5, nameDay: 'Friday'),
    ],
  ),
  Lesson(
    idLesson: 5,
    nameLesson: 'Basic Invesment',
    dayLesson: [
      DayLesson(idDay: 1, nameDay: 'Monday'),
    ],
  ),
]

But the problem is, I always get empty list. Is my structure List is the problem or am I miss something ?

Upvotes: 0

Views: 76

Answers (1)

Shababb Karim
Shababb Karim

Reputation: 3703

I don't thing contains is a correct way to do it. Since you have a List nested inside a List, you will have to nest where and any operations.

List<Lesson> _findLessons(int dayLessonId) {
   return listLesson
          .where((element)=> element.dayLesson.any((dL) => dL.idDay == dayLessonId))
          .toList();
} 

Upvotes: 1

Related Questions