flutter Dart:根据另一个列表筛选列表

ryoqjall  于 2023-02-25  发布在  Flutter
关注(0)|答案(1)|浏览(160)

我有两个这样的对象:

class Field extends RESTModel {
  int id;
  String name;
  String dataType;
  int objectId;
}

class FieldKeywordMap extends RESTModel {
  int id;
  String keywordName;
  int objectConfigurationId;
  int fieldId;
}

我有一个名为_fieldKeywordMaps的字段关键字Map列表和一个名为_selectedFields的字段列表。我正在编写一个函数,根据两个条件返回过滤后的_fieldKeywordMaps版本:
1.其中对象配置ID等于选定对象配置().id
1.其中fieldId等于_selectedFields中的项目的ID。
基于第一个条件的过滤可以工作,但是我在确定如何迭代my _selectedFields列表并将其与_fieldKeywordMaps中的对象进行比较时遇到了麻烦。

selectObjectKeywordMaps() async {
    if (selectedObjectConfiguration() != null && selectedObject() != null) {
      List<FieldKeywordMap> _maps = _fieldKeywordMaps
          .where((keywordMap) =>
              keywordMap.objectConfigurationId == selectedObjectConfiguration().id)
          .where((filteredKeywordMap) =>
              _selectedFields.map((field) => field.id).contains(filteredKeywordMap.id))
          .toList();
      _selectedObjectKeywordMaps = _maps.toList();
      fetchAffectedCustomers();
    } else {
      _selectedObjectKeywordMaps = [];
    }
    notifyListeners();
  }
eiee3dmh

eiee3dmh1#

.where((filteredKeywordMap) => _selectedFields.map(...))是不合适的。Iterable.map用于执行从一个Iterable到另一个Iterable的1:1转换。
您可以改为:
.where((filteredKeywordMap) => _selectedFields.any((field) => field.id == filteredKeywordMap.fieldId))
请注意,这样做可能效率很低,如果您将_selectedFieldsid s变为Field s,而不是List<Field> s,则会使查找更快、更简单。

相关问题