Dart:根据另一个列表过滤一个列表

Gab*_*iel 2 dart flutter

我有两个看起来像这样的对象:

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

class FieldKeywordMap extends RESTModel {
  int id;
  String keywordName;
  int objectConfigurationId;
  int fieldId;
}
Run Code Online (Sandbox Code Playgroud)

我有一个名为 _fieldKeywordMaps 的 FieldKeywordMap 列表和一个名为 _selectedFields 的字段列表。我正在编写一个函数来根据两个条件返回 _fieldKeywordMaps 的过滤版本:

  1. 其中 objectConfigurationId 等于 selectedObjectConfiguration().id
  2. 其中 fieldId 等于 _selectedFields 中项目的 id。

基于第一个条件的过滤有效,但我无法确定如何迭代我的 _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();
  }
Run Code Online (Sandbox Code Playgroud)

jam*_*lin 6

.where((filteredKeywordMap) => _selectedFields.map(...))是不合适的。Iterable.map当您想要执行从一个Iterable到另一个的 1:1 转换时使用。

相反,你可以这样做:

.where((filteredKeywordMap) => _selectedFields.any((field) => field.id == filteredKeywordMap.fieldId))

请注意,这可能效率低下。如果你_selectedFields从s 到s 而不是s,那么查找会更快更简单MapidFieldList<Field>