deepSearchByValue<V> method

List deepSearchByValue<V>(
  1. bool predicate(
    1. V value
    )
)

Returns new instance of recursively filtered (by value) List.

Implementation

List deepSearchByValue<V>(bool predicate(V value)) {
  var newList = [];
  forEach((element) {
    if (element is List) {
      var newElement = element.deepSearchByValue<V>(predicate);
      if (newElement.isNotEmpty) {
        newList.add(newElement);
      }
    } else if (element is Set) {
      var newElement = element.deepSearchByValue(predicate);
      if (newElement.isNotEmpty) {
        newList.add(newElement);
      }
    } else if (element is Map) {
      var newElement = element.deepSearchByValue(predicate);
      if (newElement.isNotEmpty) {
        newList.add(newElement);
      }
    } else if (element is V && predicate(element)) {
      newList.add(element);
    }
  });

  return newList;
}