Skip to content

Instantly share code, notes, and snippets.

@tranductam2802
Created February 27, 2022 03:41
Show Gist options
  • Save tranductam2802/25bc4eec9ee91fadf361b5ce5d4b70d8 to your computer and use it in GitHub Desktop.
Save tranductam2802/25bc4eec9ee91fadf361b5ce5d4b70d8 to your computer and use it in GitHub Desktop.
Sample flatten list
void main() {
final sampleData = <DayModel>[
DayModel(0, [
LearningModel('Sample 0.1'),
LearningModel('Sample 0.2'),
LearningModel('Sample 0.3'),
LearningModel('Sample 0.4'),
]),
DayModel(1, [
LearningModel('Sample 1.1'),
]),
DayModel(2, [
LearningModel('Sample 2.1'),
LearningModel('Sample 2.2'),
LearningModel('Sample 2.3'),
]),
];
print('[trantap] sampleData: $sampleData');
final resultExtractSimpleWay =
extractLearningModelSimpleWay(sampleData, 0, 2);
if (resultExtractSimpleWay == null) {
print('[trantap] resultExtractSimpleWay: null');
} else {
print('[trantap] resultExtractSimpleWay: $resultExtractSimpleWay');
}
final resultExtractModernWay =
extractLearningModelModernWay(sampleData, 0, 2);
if (resultExtractModernWay == null) {
print('[trantap] resultExtractModernWay: null');
} else {
print('[trantap] resultExtractModernWay: $resultExtractModernWay');
}
final resultFlatListSimpleWay = flatListLearningModelSimpleWay(sampleData);
print('[trantap] resultFlatListSimpleWay: $resultFlatListSimpleWay');
final resultFlatListModernWay = flatListLearningModelModernWay(sampleData);
print('[trantap] resultFlatListModernWay: $resultFlatListModernWay');
}
LearningModel? extractLearningModelSimpleWay(
List<DayModel> data, int dayId, int learnIndex) {
// TODO(trantap) [chungnt] - Validate data
for (final row in data) {
if (row.id == dayId) {
final learnModels = row.learningModels;
if (learnModels.length > learnIndex) {
return learnModels[learnIndex];
}
break;
}
}
return null;
}
LearningModel? extractLearningModelModernWay(
List<DayModel> data, int dayId, int learnIndex) {
// TODO(trantap) [chungnt] - Validate data
try {
// orElse is not able to work under null-safety when list data are non-null list
final dayModel =
data.firstWhere((e) => e.id == dayId); // Exception may occur here
return dayModel.learningModels.length > learnIndex
? dayModel.learningModels[learnIndex]
: null;
} on StateError catch (_) {
return null;
}
}
List<LearningModel> flatListLearningModelSimpleWay(List<DayModel> data) {
final result = <LearningModel>[];
for (final row in data) {
result.addAll(row.learningModels);
}
return result;
}
List<LearningModel> flatListLearningModelModernWay(List<DayModel> data) {
return data.map((e) => e.learningModels).expand((a) => a).toList();
}
class DayModel {
DayModel(this.id, this.learningModels);
final int id;
final List<LearningModel> learningModels;
}
class LearningModel {
LearningModel(this.sample);
final String sample;
Map<String, dynamic> toMap() {
return {
'sample': sample,
};
}
@override
String toString() {
return '${toMap()}';
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment