Uses of Class
com.google.mu.util.stream.BiStream

Packages that use BiStream
Package
Description
A few useful collections.
StringFormat, Substring, Optionals and more...
Parallelizer (parallel stream using Executor), Retryer.
Stream-based incremental graph algorithms.
BiStream, BiCollector, MoreStreams, MoreCollectors etc.
  • Uses of BiStream in com.google.mu.collect

    Methods in com.google.mu.collect that return BiStream
    Modifier and Type
    Method
    Description
    PrefixSearchTable.getAll(List<? extends K> compoundKey)
    Searches the table for prefixes of compoundKey and returns a lazy BiStream of all mappings in ascending order of prefix length.
  • Uses of BiStream in com.google.mu.util

    Methods in com.google.mu.util that return BiStream
    Modifier and Type
    Method
    Description
    Substring.RepeatingPattern.alternationFrom(String input)
    Returns the alternation of this pattern from the input string, with the matched substring alternated with the trailing substring before the next match.
    Substring.RepeatingPattern.splitKeyValuesAround(Substring.Pattern keyValueSeparator, String input)
    Returns a BiStream of key value pairs from input.
    Substring.RepeatingPattern.splitThenTrimKeyValuesAround(Substring.Pattern keyValueSeparator, String input)
    Returns a BiStream of key value pairs from input.
    abstract BiStream<A,B>
    BiOptional.stream()
    Returns a BiStream view of this BiOptional.
    Methods in com.google.mu.util with parameters of type BiStream
    Modifier and Type
    Method
    Description
    StringFormat.Interpolator.interpolate(List<String> fragments, BiStream<Substring.Match,Object> placeholders)
    Interpolates with fragments of size N + 1 and placeholders of size N.
  • Uses of BiStream in com.google.mu.util.concurrent

    Methods in com.google.mu.util.concurrent that return types with arguments of type BiStream
    Modifier and Type
    Method
    Description
    <I, O> Collector<I,?,BiStream<I,O>>
    Parallelizer.inParallel(Function<? super I,? extends O> concurrentFunction)
    Returns a Collector that runs concurrentFunction in parallel using this Parallelizer and returns the inputs and outputs in a BiStream, in encounter order of the input elements.
  • Uses of BiStream in com.google.mu.util.graph

    Methods in com.google.mu.util.graph that return BiStream
    Modifier and Type
    Method
    Description
    ShortestPath.stream()
    Returns all nodes from the starting node along this path, with the cumulative distances from the starting node up to each node in the stream, respectively.
    Method parameters in com.google.mu.util.graph with type arguments of type BiStream
    Modifier and Type
    Method
    Description
    static <N> Stream<ShortestPath<N>>
    ShortestPath.shortestPathsFrom(N startNode, Function<? super N,? extends BiStream<? extends N,Double>> findSuccessors)
    Returns a lazy stream of shortest paths starting from startNode.
  • Uses of BiStream in com.google.mu.util.stream

    Methods in com.google.mu.util.stream that return BiStream
    Modifier and Type
    Method
    Description
    final BiStream<K,V>
    BiStream.append(BiStream<? extends K,? extends V> other)
    Returns a BiStream consisting of the pairs in this stream, followed by the pairs in other.
    final BiStream<K,V>
    BiStream.append(K key, V value)
    Returns a BiStream consisting of the pairs in this stream, followed by the pair of key and value.
    static <K, V> BiStream<K,V>
    BiStream.biStream(Collection<K> keys, Function<? super K,? extends V> toValue)
    Returns a BiStream of mappings between keys and the corresponding return values of the toValue function.
    static <T> BiStream<T,T>
    BiStream.biStream(Collection<T> elements)
    Short-hand for from(elements, identity(), identity()).
    static <K, V> BiStream<K,V>
    BiStream.biStream(Function<? super V,? extends K> toKey, Collection<V> values)
    Returns a BiStream of mappings between the key returned by the toKey function (when applied to each element of values), and the element itself.
    static <K, V> BiStream<K,V>
    BiStream.biStream(Function<? super V,? extends K> toKey, Stream<V> values)
    Returns a BiStream of mappings between the key returned by the toKey function (when applied to each element of values), and the element itself.
    static <K, V> BiStream<K,V>
    BiStream.biStream(Stream<K> keys, Function<? super K,? extends V> toValue)
    Returns a BiStream of mappings between keys and the corresponding return values of the toValue function.
    static <T> BiStream<T,T>
    BiStream.biStream(Stream<T> elements)
    Short-hand for from(elements, identity(), identity()).
    BiStream.Builder.build()
     
    static <K, V> BiStream<K,V>
    BiStream.concat(BiStream<? extends K,? extends V> s1, BiStream<? extends K,? extends V> s2, BiStream<? extends K,? extends V>... rest)
    Returns a BiStream of the entries from s1, s2 then rest in encounter order.
    static <K, V> BiStream<K,V>
    BiStream.concat(Map<? extends K,? extends V> m1, Map<? extends K,? extends V> m2, Map<? extends K,? extends V>... rest)
    Returns a BiStream of the entries from m1, m2 then rest in encounter order.
    static <K, V> BiStream<K,V>
    BiStream.concat(Stream<? extends BiStream<? extends K,? extends V>> biStreams)
    Returns a BiStream of pairs from biStreams concatenated in encounter order.
    final BiStream<K,V>
    BiStream.distinct()
    Returns a BiStream consisting of only the distinct pairs (according to Object.equals(Object) for both key and value).
    static <K, V> BiStream<K,V>
    BiStream.empty()
    Returns an empty BiStream.
    final BiStream<K,V>
    BiStream.filter(BiPredicate<? super K,? super V> predicate)
    Filter this stream to only pairs matching predicate.
    final BiStream<K,V>
    BiStream.filterKeys(Predicate<? super K> predicate)
    Filter this stream to only pairs whose key matches predicate.
    final BiStream<K,V>
    BiStream.filterValues(Predicate<? super V> predicate)
    Filter this stream to only pairs whose value matches predicate.
    final <K2, V2> BiStream<K2,V2>
    BiStream.flatMap(BiFunction<? super K,? super V,? extends BiStream<? extends K2,? extends V2>> mapper)
    Maps each pair in this stream to zero or more pairs in another BiStream.
    final <K2> BiStream<K2,V>
    BiStream.flatMapKeys(BiFunction<? super K,? super V,? extends Stream<? extends K2>> keyMapper)
    Maps each key to zero or more keys of type K2.
    final <K2> BiStream<K2,V>
    BiStream.flatMapKeys(Function<? super K,? extends Stream<? extends K2>> keyMapper)
    Maps each key to zero or more keys of type K2.
    final <V2> BiStream<K,V2>
    BiStream.flatMapValues(BiFunction<? super K,? super V,? extends Stream<? extends V2>> valueMapper)
    Maps each value to zero or more values of type V2.
    final <V2> BiStream<K,V2>
    BiStream.flatMapValues(Function<? super V,? extends Stream<? extends V2>> valueMapper)
    Maps each value to zero or more values of type V2.
    static <K, V> BiStream<K,V>
    BiStream.from(Collection<? extends Map.Entry<? extends K,? extends V>> entries)
    Returns a BiStream of the key value pairs from entries.
    static <T, K, V> BiStream<K,V>
    BiStream.from(Collection<T> elements, Function<? super T,? extends K> toKey, Function<? super T,? extends V> toValue)
    Deprecated.
    Use biStream(User::id, users) to create BiStream<UserId, User>, or, use biStream(users, User::getAccount) to create BiStream<User, Account>.
    static <K, V> BiStream<K,V>
    BiStream.from(Map<K,V> map)
    Returns a BiStream of the entries in map.
    static <K, V> BiStream<K,V>
    BiStream.from(Stream<? extends Both<? extends K,? extends V>> pairs)
    Returns a BiStream of the pairs from stream.
    static <T, K, V> BiStream<K,V>
    BiStream.from(Stream<T> stream, Function<? super T,? extends K> toKey, Function<? super T,? extends V> toValue)
    Deprecated.
    Use biStream(User::id, users) to create BiStream<UserId, User>, or, use biStream(users, User::getAccount) to create BiStream<User, Account>.
    static <K, V, E extends Map.Entry<? extends K, ? extends V>>
    BiStream<K,V>
    BiStream.fromEntries(Stream<E> entryStream)
     
    final <G, A, R> BiStream<G,R>
    BiStream.groupConsecutiveBy(BiFunction<? super K,? super V,? extends G> classifier, BiCollector<? super K,? super V,R> groupCollector)
    Returns a BiStream consisting of consecutive groupings from this stream.
    final <G> BiStream<G,V>
    BiStream.groupConsecutiveBy(Function<? super K,? extends G> classifier, BinaryOperator<V> groupReducer)
    Returns a lazy BiStream of the consecutive groups of pairs from this stream.
    final <G, A, R> BiStream<G,R>
    BiStream.groupConsecutiveBy(Function<? super K,? extends G> classifier, Collector<? super V,A,? extends R> groupCollector)
    Returns a BiStream consisting of consecutive groupings from this stream.
    abstract BiStream<V,K>
    BiStream.inverse()
    Returns a BiStream where each pair is a pair from this stream with the key and value swapped.
    final BiStream<L,R>
    BiIteration.iterate()
    Starts iteration over the yielded pairs.
    abstract BiStream<K,V>
    BiStream.limit(int maxSize)
    Returns a BiStream consisting of the only the first maxSize pairs of this stream.
    final <K2, V2> BiStream<K2,V2>
    BiStream.map(BiFunction<? super K,? super V,? extends Both<? extends K2,? extends V2>> mapper)
    Returns a BiStream consisting of the result pairs of applying mapper to the pairs in this BiStream.
    <K2, V2> BiStream<K2,V2>
    BiStream.map(BiFunction<? super K,? super V,? extends K2> keyMapper, BiFunction<? super K,? super V,? extends V2> valueMapper)
    Returns a BiStream consisting of the results of applying keyMapper and valueMapper to the pairs in this BiStream.
    final <K2, V2> BiStream<K2,V2>
    BiStream.mapIfPresent(BiFunction<? super K,? super V,? extends BiOptional<? extends K2,? extends V2>> mapper)
    Returns a BiStream consisting of the results of applying mapper function to the pairs in this BiStream.
    <K2> BiStream<K2,V>
    BiStream.mapKeys(BiFunction<? super K,? super V,? extends K2> keyMapper)
    Returns a BiStream of pairs whose keys are the result of applying keyMapper to the key of each pair in this BiStream, and whose values are unchanged.
    abstract <K2> BiStream<K2,V>
    BiStream.mapKeys(Function<? super K,? extends K2> keyMapper)
    Maps each key to another key of type K2.
    final <K2> BiStream<K2,V>
    BiStream.mapKeysIfPresent(BiFunction<? super K,? super V,? extends Optional<? extends K2>> keyMapper)
    Returns a BiStream of pairs whose keys are the result of applying keyMapper to each pair in this BiStream, and whose values are unchanged.
    final <K2> BiStream<K2,V>
    BiStream.mapKeysIfPresent(Function<? super K,? extends Optional<? extends K2>> keyMapper)
    Returns a BiStream of pairs whose keys are the result of applying keyMapper to the key of each pair in this BiStream, and whose values are unchanged.
    final <K2> BiStream<K2,V>
    BiStream.mapKeysIfPresent(Map<? super K,? extends K2> keyMapping)
    Given keyMapping that maps the keys of type K to elements of type K2, returns a BiStream of type <K2, V>.
    <V2> BiStream<K,V2>
    BiStream.mapValues(BiFunction<? super K,? super V,? extends V2> valueMapper)
    Maps each value to another value of type V2.
    abstract <V2> BiStream<K,V2>
    BiStream.mapValues(Function<? super V,? extends V2> valueMapper)
    Maps each value to another value of type V2.
    final <V2> BiStream<K,V2>
    BiStream.mapValuesIfPresent(BiFunction<? super K,? super V,? extends Optional<? extends V2>> valueMapper)
    Returns a BiStream of pairs whose values are the result of applying valueMapper to each pair in this BiStream, and whose keys are unchanged.
    final <V2> BiStream<K,V2>
    BiStream.mapValuesIfPresent(Function<? super V,? extends Optional<? extends V2>> valueMapper)
    Returns a BiStream of pairs whose values are the result of applying valueMapper to the value of each pair in this BiStream, and whose keys are unchanged.
    final <V2> BiStream<K,V2>
    BiStream.mapValuesIfPresent(Map<? super V,? extends V2> valueMapping)
    Given valueMapping that maps values of type V to result values of type V2, returns a BiStream of type <K, V2>.
    static <K, V> BiStream<K,V>
    BiStream.of(K key, V value)
    Returns a BiStream of a single pair containing key and value.
    static <K, V> BiStream<K,V>
    BiStream.of(K key1, V value1, K key2, V value2)
    Returns a BiStream of two pairs, containing the supplied keys and values.
    static <K, V> BiStream<K,V>
    BiStream.of(K key1, V value1, K key2, V value2, K key3, V value3)
    Returns a BiStream of three pairs, containing the supplied keys and values.
    static <K, V> BiStream<K,V>
    BiStream.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4)
    Returns a BiStream of 4 pairs, containing the supplied keys and values.
    static <K, V> BiStream<K,V>
    BiStream.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)
    Returns a BiStream of 5 pairs, containing the supplied keys and values.
    static <K, V> BiStream<K,V>
    BiStream.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6)
    Returns a BiStream of 6 pairs, containing the supplied keys and values.
    static <K, V> BiStream<K,V>
    BiStream.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7)
    Returns a BiStream of 7 pairs, containing the supplied keys and values.
    static <K, V> BiStream<K,V>
    BiStream.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8)
    Returns a BiStream of 8 pairs, containing the supplied keys and values.
    static <K, V> BiStream<K,V>
    BiStream.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9)
    Returns a BiStream of 9 pairs, containing the supplied keys and values.
    static <K, V> BiStream<K,V>
    BiStream.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10)
    Returns a BiStream of 10 pairs, containing the supplied keys and values.
    final BiStream<K,V>
    BiStream.peek(BiConsumer<? super K,? super V> action)
    Returns a BiStream consisting of the pairs of this stream, additionally invoking action on each pair as pairs are consumed from the resulting stream.
    static <I, O> BiStream<I,O>
    BiStream.repeat(Function<? super I,? extends O> work, I initial, BiFunction<? super I,? super O,? extends Optional<? extends I>> increment)
    Returns a stream of the inputs and outputs from repeated applications of the work function.
    static <T> BiStream<T,Long>
    MoreStreams.runLengthEncode(Stream<T> stream, BiPredicate<? super T,? super T> sameGroup)
    Groups consecutive items in stream using the sameGroup predicate, along with the group's run length (number of items).
    abstract BiStream<K,V>
    BiStream.skip(int n)
    Returns a BiStream consisting of the remaining pairs from this stream, after discarding the first n pairs.
    final BiStream<K,V>
    BiStream.skipIf(BiPredicate<? super K,? super V> predicate)
    Filter this stream to exclude pairs matching predicate.
    final BiStream<K,V>
    BiStream.skipKeysIf(Predicate<? super K> predicate)
    Filter this stream to exclude pairs whose key matches predicate.
    final BiStream<K,V>
    BiStream.skipValuesIf(Predicate<? super V> predicate)
    Filter this stream to exclude pairs whose value matches predicate.
    final BiStream<K,V>
    BiStream.sorted(Comparator<? super K> byKey, Comparator<? super V> byValue)
    Returns a BiStream consisting of the pairs in this stream, in the order produced by applying the byKey comparator on the keys of each pair, and then the byValue comparator on the values of pairs with equal keys.
    final <T> BiStream<K,V>
    BiStream.sortedBy(BiFunction<? super K,? super V,T> sortKeyFunction, Comparator<? super T> comparator)
    Returns a BiStream consisting of the pairs in this stream, in the order produced by applying comparator on the result of applying the sortKeyFunction.
    final BiStream<K,V>
    BiStream.sortedByKeys(Comparator<? super K> comparator)
    Returns a BiStream consisting of the pairs in this stream, in the order produced by applying comparator on the keys of each pair.
    final BiStream<K,V>
    BiStream.sortedByValues(Comparator<? super V> comparator)
    Returns a BiStream consisting of the pairs in this stream, in the order produced by applying comparator on the values of each pair.
    BiCollection.stream()
    Deprecated.
    Streams over this BiCollection.
    static <L, R> BiStream<L,R>
    BiStream.zip(Collection<L> left, Collection<R> right)
    Returns a BiStream in which the first element in left is paired with the first element in right; the second paired with the corresponding second and the third with the corresponding third etc.
    static <L, R> BiStream<L,R>
    BiStream.zip(Stream<L> left, Stream<R> right)
    Returns a BiStream in which the first element in left is paired with the first element in right; the second paired with the corresponding second and the third with the corresponding third etc.
    Methods in com.google.mu.util.stream that return types with arguments of type BiStream
    Modifier and Type
    Method
    Description
    static <T, K, V> Collector<T,?,BiStream<K,V>>
    BiStream.concatenating(Function<? super T,? extends BiStream<? extends K,? extends V>> toBiStream)
    Returns a Collector that concatenates BiStream objects derived from the input elements using the given toBiStream function.
    static <L, R> Collector<L,?,BiStream<L,R>>
    BiStream.crossJoining(Stream<R> right)
    Returns a Collector that will pair each input element with each element from right into a new BiStream.
    static <R, C, V> BiCollector<C,V,BiStream<R,BiStream<C,V>>>
    BiCollectors.groupingBy(BiFunction<? super C,? super V,? extends R> classifier)
    Groups input pairs by classifier and collects entries belonging to the same group into a nested BiStream.
    static <R, C, V> BiCollector<C,V,BiStream<R,BiStream<C,V>>>
    BiCollectors.groupingBy(BiFunction<? super C,? super V,? extends R> classifier)
    Groups input pairs by classifier and collects entries belonging to the same group into a nested BiStream.
    static <K, V, G, R>
    BiCollector<K,V,BiStream<G,R>>
    BiCollectors.groupingBy(BiFunction<? super K,? super V,? extends G> classifier, BiCollector<? super K,? super V,R> groupCollector)
    Groups input entries by classifier and collects entries belonging to the same group using groupCollector.
    static <K, V, G> BiCollector<K,V,BiStream<G,V>>
    BiCollectors.groupingBy(Function<? super K,? extends G> classifier, BinaryOperator<V> groupReducer)
    Groups input pairs by classifier and reduces values belonging to the same group using groupReducer.
    static <K, V, G, R>
    BiCollector<K,V,BiStream<G,R>>
    BiCollectors.groupingBy(Function<? super K,? extends G> classifier, Collector<? super V,?,R> groupCollector)
    Groups input entries by classifier and collects values belonging to the same group using groupCollector.
    static <T, K> Collector<T,?,BiStream<K,List<T>>>
    BiStream.groupingBy(Function<? super T,? extends K> classifier)
    Returns a Collector that groups the input elements by classifier and collects the values mapping to the same key into a List.
    static <T, K, V> Collector<T,?,BiStream<K,V>>
    BiStream.groupingBy(Function<? super T,? extends K> classifier, Function<? super T,? extends V> mapper, BinaryOperator<V> reducer)
    Returns a Collector that groups the input elements by classifier and reduces the values mapping to the same key using mapper then reducer.
    static <T, K, V> Collector<T,?,BiStream<K,V>>
    BiStream.groupingBy(Function<? super T,? extends K> classifier, Collector<? super T,?,V> valueCollector)
    Returns a Collector that groups the input elements by classifier and collects the values mapping to the same key using valueCollector.
    static <K, V> Collector<V,?,BiStream<K,V>>
    BiStream.groupingBy(Function<? super V,? extends K> classifier, BinaryOperator<V> reducer)
    Returns a Collector that groups the input elements by classifier and reduces the values mapping to the same key using reducer.
    static <T, K, V> Collector<T,?,BiStream<K,V>>
    BiStream.groupingByEach(Function<? super T,? extends Stream<? extends K>> keysFunction, Function<? super T,? extends V> valueFunction, BinaryOperator<V> groupReducer)
    Returns a Collector grouping input elements by each of the multiple keys returned by the keysFunction.
    static <T, K, V, G>
    Collector<T,?,BiStream<K,G>>
    BiStream.groupingByEach(Function<? super T,? extends Stream<? extends K>> keysFunction, Function<? super T,? extends V> valueFunction, Collector<V,?,G> groupCollector)
    Returns a Collector grouping input elements by each of the multiple keys returned by the keysFunction.
    static <T, K, V> Collector<T,?,BiStream<K,V>>
    BiStream.groupingByEach(Function<? super T,? extends Stream<? extends K>> keysFunction, Collector<T,?,V> groupCollector)
    Returns a Collector grouping input elements by each of the multiple keys returned by the keysFunction.
    static <T> Collector<T,?,BiStream<T,T>>
    BiStream.toAdjacentPairs()
    Returns a Collector that accumulates every neighboring pair of elements into a new BiStream.
    static <T> Collector<T,?,BiStream<T,T>>
    BiStream.toBiStream()
    Returns a Collector that copies each input element as a pair of itself into an equivalent BiStream.
    static <E, K, V> Collector<E,?,BiStream<K,V>>
    BiStream.toBiStream(Function<? super E,? extends Both<? extends K,? extends V>> toPair)
    Returns a Collector that splits each input element as a pair and collects them into a BiStream.
    static <E, K, V> Collector<E,?,BiStream<K,V>>
    BiStream.toBiStream(Function<? super E,? extends K> toKey, Function<? super E,? extends V> toValue)
    Returns a Collector that splits each input element as a pair and collects them into a BiStream.
    static <R, C, V> BiCollector<R,BiStream<? extends C,? extends V>,com.google.common.collect.ImmutableTable<R,C,V>>
    GuavaCollectors.toImmutableTable()
    Returns a BiCollector that collects the key-value pairs into an com.google.common.collect.ImmutableTable<R,C,V>, where each input key (of type R) is mapped to a row in the table, and each input value is a BiStream<C, V> whose keys (of type C) are mapped to columns in the table, and whose values (of type V) are mapped to the cell values.
    Methods in com.google.mu.util.stream with parameters of type BiStream
    Modifier and Type
    Method
    Description
    final BiStream<K,V>
    BiStream.append(BiStream<? extends K,? extends V> other)
    Returns a BiStream consisting of the pairs in this stream, followed by the pairs in other.
    static <K, V> BiStream<K,V>
    BiStream.concat(BiStream<? extends K,? extends V> s1, BiStream<? extends K,? extends V> s2, BiStream<? extends K,? extends V>... rest)
    Returns a BiStream of the entries from s1, s2 then rest in encounter order.
    Method parameters in com.google.mu.util.stream with type arguments of type BiStream
    Modifier and Type
    Method
    Description
    static <K, V, R> BiCollector<K,V,R>
    BiCollectors.collectingAndThen(Function<? super BiStream<K,V>,? extends R> finisher)
    Returns a BiCollector that first collects the input pairs into a BiStream and then applies finisher on the intermediary BiStream.
    static <K, V> BiStream<K,V>
    BiStream.concat(Stream<? extends BiStream<? extends K,? extends V>> biStreams)
    Returns a BiStream of pairs from biStreams concatenated in encounter order.
    static <T, K, V> Collector<T,?,BiStream<K,V>>
    BiStream.concatenating(Function<? super T,? extends BiStream<? extends K,? extends V>> toBiStream)
    Returns a Collector that concatenates BiStream objects derived from the input elements using the given toBiStream function.
    final <K2, V2> BiStream<K2,V2>
    BiStream.flatMap(BiFunction<? super K,? super V,? extends BiStream<? extends K2,? extends V2>> mapper)
    Maps each pair in this stream to zero or more pairs in another BiStream.
    static <K, V, K1, V1, R>
    BiCollector<K,V,R>
    BiCollectors.flatMapping(BiFunction<? super K,? super V,? extends BiStream<? extends K1,? extends V1>> flattener, BiCollector<K1,V1,R> downstream)
    Returns a BiCollector that first flattens the input pair using flattener and then collects the result pairs using downstream collector.
    static <T, K, V, R>
    Collector<T,?,R>
    MoreCollectors.flatMapping(Function<? super T,? extends BiStream<? extends K,? extends V>> flattener, BiCollector<K,V,R> downstream)
    Similar but slightly different than Collectors.flatMapping(java.util.function.Function<? super T, ? extends java.util.stream.Stream<? extends U>>, java.util.stream.Collector<? super U, A, R>), returns a Collector that first flattens the input stream of pairs (as opposed to single elements) and then collects the flattened pairs with the downstream BiCollector.