HH\Asio\mfk

Returns an Awaitable of Map after a filtering operation has been applied to each key and value in the provided KeyedTraversable.

Description

function HH\Asio\mfk(
  KeyedTraversable<Tk,Tv> $inputs,
  callable $callable,
): Awaitable<Map<Tk,Tv>>

Returns an Awaitable of Map after a filtering operation has been applied to each key and value in the provided KeyedTraversable.

This function is similar to mf(), but passes element keys to the callable as well.

This function is similar to Map::filterWithKey(), but the filtering of the keys and values is done using Awaitables.

This function is called mfk because we are returning a map, doing a a filtering operation that includes keys.

$callable must return an Awaitable of bool.

The keys and values in the Map of the returned Awaitable are not available until you await or join the returned Awaitable.

Parameters

  • KeyedTraversable<Tk,Tv> $inputs - The KeyedTraversable of keys and values to filter.
  • callable $callable - The callable containing the Awaitable operation to apply to $inputs.

Return Values

Examples

<?hh

namespace Hack\UserDocumentation\API\Examples\HH\Asio\mfk;

enum COLOR: int {
  RED = 1;
  ORANGE = 2;
  YELLOW = 3;
  GREEN = 4;
  BLUE = 5;
  INDIGO = 6;
  VIOLET = 7;
}

$fruits = ImmMap {
  'Apple' => COLOR::RED,
  'Banana' => COLOR::YELLOW,
  'Grape' => COLOR::GREEN,
  'Orange' => COLOR::ORANGE,
  'Pineapple' => COLOR::YELLOW,
  'Tangerine' => COLOR::ORANGE,
};

// Similar to $times->filter(...)
// But awaits the awaitable result of the callback
// rather than using it directly
$not_self_named = \HH\Asio\join(\HH\Asio\mfk(
  $fruits,

  // Exclude fruits who's name is the same as their color
  async ($name, $color) ==> strcasecmp($name, COLOR::getNames()[$color]),
));

foreach($not_self_named as $fruit => $color) {
  echo $fruit, 's are ', COLOR::getNames()[$color], "\n";
}
Output
Apples are RED
Bananas are YELLOW
Grapes are GREEN
Pineapples are YELLOW
Tangerines are ORANGE