Skip to content

Commit af94e7e

Browse files
committed
stream method for maps
1 parent 1cf5e98 commit af94e7e

File tree

5 files changed

+87
-0
lines changed

5 files changed

+87
-0
lines changed

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,8 @@ Classes implement `Stack` interface: ```HashMap```
593593
- [*containsKey* – Sign of the presence of a key pair](#containskey---sign-of-the-presence-of-a-key-pair)
594594
- [*containsValue* – Sign of the presence of a pair by value](#containsvalue---sign-of-the-presence-of-a-pair-by-value)
595595
- [*size* – Number of pairs in the card](#size---number-of-pairs-in-the-card)
596+
- [*stream* - Getting traverse stream with collection of key/value pair (Stream)](#stream---getting-traverse-streamw-with-collection-of-key-value-pair-stream)
597+
- [Traverse map in _foreach_ loop](#Traverse-map-in-_foreach_-loop)
596598

597599
#### put - Adding key/value pair
598600
[[↑ Map]](#map)
@@ -761,6 +763,31 @@ $map->size(); // 0
761763

762764
```
763765

766+
#### _stream_ - Getting traverse stream with collection of pair key/value (Stream)
767+
[[↑ Map]](#map)
768+
```
769+
stream(): Stream;
770+
```
771+
772+
Method returns object of Stream interface. Internal collection elements are pair of key/value.
773+
774+
```php
775+
776+
use \WS\Utils\Collections\HashMap;
777+
use \WS\Utils\Collections\MapEntry;
778+
779+
$map = new HashMap();
780+
781+
$map->put('one', 1);
782+
$map->put('two', 2);
783+
$map->put('tree', 3);
784+
785+
$map->stream()->each(static function (MapEntry $mapEntry) {
786+
var_export($mapEntry->getKey()); // 'one', 'two', 'three'
787+
var_export($mapEntry->getKey()); // 1 , 2 , 3
788+
});
789+
790+
```
764791

765792
#### Traverse map in _foreach_ loop
766793
[[↑ Map]](#map)

doc/README.ru.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,7 @@ $queue->peek(); // RuntimeException
593593
- [*containsKey* – Признак наличия пары по ключу](#containskey---признак-наличия-пары-по-ключу)
594594
- [*containsValue* – Признак наличия пары по значению](#containsvalue---признак-наличия-пары-по-значению)
595595
- [*size* – Количество пар в карте](#size---количество-пар-в-карте)
596+
- [*stream* – Получение потока обхода коллекции пар ключ/значение (Stream)](#stream---получение-потока-обхода-коллекции-пар-ключ-значение-stream)
596597
- [Обход объекта map при помощи цикла _foreach_](#обход-объекта-map-при-помощи-цикла-_foreach_)
597598

598599
#### _put_ - Добавление пары *ключ/значение*
@@ -762,6 +763,32 @@ $map->size(); // 0
762763

763764
```
764765

766+
#### _stream_ - Получение потока обхода коллекции пар ключ/значение (Stream)
767+
[[↑ Карта (Map)]](#карта-map)
768+
```
769+
stream(): Stream;
770+
```
771+
772+
Метод возвращает объект, который реализует интерфейс обхода (Stream). Элементами коллекции потока являются объекты пар ключ/значение `KeyPair`. [Подробнее...](#Поток обхода коллекции)
773+
774+
```php
775+
776+
use \WS\Utils\Collections\HashMap;
777+
use \WS\Utils\Collections\MapEntry;
778+
779+
$map = new HashMap();
780+
781+
$map->put('one', 1);
782+
$map->put('two', 2);
783+
$map->put('tree', 3);
784+
785+
$map->stream()->each(static function (MapEntry $mapEntry) {
786+
var_export($mapEntry->getKey()); // 'one', 'two', 'three'
787+
var_export($mapEntry->getKey()); // 1 , 2 , 3
788+
});
789+
790+
```
791+
765792
#### Обход объекта map при помощи цикла _foreach_
766793
[[↑ Карта (Map)]](#карта-map)
767794

src/WS/Utils/Collections/HashMap.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,9 @@ public function containsValue($tested): bool
136136
}
137137
return false;
138138
}
139+
140+
public function stream(): Stream
141+
{
142+
return new SerialStream(CollectionFactory::from(array_values($this->entries)));
143+
}
139144
}

src/WS/Utils/Collections/Map.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,10 @@ public function size(): int;
4747
* @return mixed|null
4848
*/
4949
public function get($key);
50+
51+
/**
52+
* Creates a stream with internal collection MapEntry objects
53+
* @return Stream Stream<MapEntry>
54+
*/
55+
public function stream(): Stream;
5056
}

tests/WS/Utils/Collections/MapInterfaceTestTrait.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,4 +250,26 @@ public function foreachAnyKeyValueChecking(): void
250250
}
251251
}
252252
}
253+
254+
/**
255+
* @test
256+
*/
257+
public function streamGetting(): void
258+
{
259+
$map = $this->createInstance();
260+
261+
$map->put('1', 1);
262+
$map->put('2', 2);
263+
$map->put('3', 3);
264+
265+
$stream = $map->stream();
266+
self::assertThat($stream, self::isInstanceOf(Stream::class));
267+
268+
self::assertGreaterThan(0, $stream->getCollection()->size());
269+
270+
$stream
271+
->each(static function (MapEntry $mapEntry) {
272+
self::assertThat($mapEntry->getKey() === ''.$mapEntry->getValue(), self::isTrue());
273+
});
274+
}
253275
}

0 commit comments

Comments
 (0)