Алгоритм поиска по id из трех списков моделей на Dart?

У меня есть 3 модели и три списка. Как правильно записать алгоритм поиска одинаковых айди-ключей в каждом списке: Пока я пытаюсь реализовать это вот так (обязательно должно быть асинхронно, потому что в реальности я буду использовать гет-запросы на сервер). Понимаю, что алгоритм по сути сырой, потому что три вложенных друг в друга for-а и два if-а скорости не добавляют. В реальном проекте все происходит довольно медленно. Как правильно можно оптимизировать?

Данные представленные тут захордокожены для лучшего понимаю. что я хочу достичь.

Сам алгоритм (цикл):

Future <List<dynamic>> mergedItems(List<Stop> stops, List<MarshVariants> variants, List<Flightcard> card) async {
  List <Stop> commonList = [];

  for(var j = 0; j <variants.length; j++){
    for(var i = 0; i <stops.length; i++){
      for(var k = 0; k < card.length; k++){
        if(variants[i].mvId == card[k].mvId){
          if(card[k].stId == stops[i].stId){
          }
        await commonList.add(stop[i], variants[j], card[k]);
        }
      }
    }
  }
}

Модели:

   class Routes{
 final int mrId;
  final String mrTitle;

  Routes({this.mrId, this.mrTitle});
}
 class MarshVariants{
          final int mrId;
          final int mvId;
        
          MarshVariants({this.mrId, this.mvId});
        }
        class Flightcard{
          final int stId;
         final  int mvId;
        
          Flightcard({this.stId, this.mvId});
        }
        
        class Stop{
          final int stId;
          final String stTitle;
        
          Stop({this.stId, this.stTitle});
        }

Что внутри моделей:

List<Routes> routes = <Routes>[
  Routes(mrId: 1, mrTitle: 'San marino'),
  Routes(mrId: 2, mrTitle: 'new Mexico'),
  Routes(mrId: 3, mrTitle: 'San Paulo'),
];

List<Stop> stops = <Stop>[
  Stop(stId: 1, stTitle: 'Stop1'),
  Stop(stId: 1, stTitle: 'Stop1'),
  Stop(stId: 1, stTitle: 'Stop1'),
  Stop(stId: 2, stTitle: 'Stop2'),
  Stop(stId: 2, stTitle: 'Stop2'),
  Stop(stId: 3, stTitle: 'Stop3'),
  Stop(stId: 3, stTitle: 'Stop3'),
];

List<MarshVariants> variants = <MarshVariants>[
  MarshVariants(mrId: 1, mvId: 1),
  MarshVariants(mrId: 1, mvId: 1),
  MarshVariants(mrId: 1, mvId: 1),
  MarshVariants(mrId: 2, mvId: 2),
  MarshVariants(mrId: 2, mvId: 2),
  MarshVariants(mrId: 3, mvId: 3),
  MarshVariants(mrId: 3, mvId: 3),
];

List<Flightcard> card = <Flightcard>[
  Flightcard(stId: 1, mvId: 1),
  Flightcard(stId: 1, mvId: 1),
  Flightcard(stId: 1, mvId: 1),
  Flightcard(stId: 2, mvId: 2),
  Flightcard(stId: 2, mvId: 2),
  Flightcard(stId: 3, mvId: 3),
  Flightcard(stId: 3, mvId: 3),
];

Что пытаюсь добиться:

List<Stop> commonList = <Stop>[
  Stop(stId: 1, stTitle: 'Stop', mrId: 1, mv: 1),
  Stop(stId: 2, stTitle: 'Stop2', mrId: 1, mv: 1),
  Stop(stId: 1, stTitle: 'Stop3', mrId: 1, mv: 1),
] ;

То есть задумка такова, что все модели и инфа в них, слиты в один список, где сразу же находятся все айдишники из предыдущих моделей, то есть внутри списка List<Stop> commonList находятся данные из моделей MarshVariants, FlightCard и самой Stop и им можно было бы манипулировать внутри UI и при помощи методов для списков.


Ответы (0 шт):