Many of the user storage interfaces in {project_name} contain query methods that can return potentially large sets of objects,
which might lead to significant impacts in terms of memory consumption and processing time. This is especially true when only
a small subset of the objects' internal state is used in the query method's logic.
To provide developers with a more efficient alternative to process large data sets in these query methods, a `Streams`
sub-interface has been added to user storage interfaces. These `Streams` sub-interfaces replace the original collection-based
methods in the super-interfaces with stream-based variants, making the collection-based methods default. The default implementation
of a collection-based query method invokes its `Stream` counterpart and collects the result into the proper collection type.
The `Streams` sub-interfaces allow for implementations to focus on the stream-based approach for processing sets of data and
benefit from the potential memory and performance optimizations of that approach. The interfaces that offer a `Streams`
sub-interface to be implemented include a few _<<_provider_capability_interfaces,capability interfaces>>_, all interfaces in the `org.keycloak.storage.federated`
package and a few others that might be implemented depending on the scope of the custom storage implementation.
See this list of the interfaces that offer a `Streams` sub-interface to developers.