Алгоритм поиска по 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 и при помощи методов для списков.