anon767 / phpstream
PHP流API
dev-master
2018-02-01 20:44 UTC
Requires
- php: >=5.0
Requires (Dev)
- phpunit/phpunit: 6.5
This package is not auto-updated.
Last update: 2024-09-29 05:08:11 UTC
README
这个库基于Java的Stream-Api和JavaScript的Array-Prototype
(https://docs.oracle.com/javase/8/docs/api/?java/util/stream/Stream.html)
(https://mdn.org.cn/de/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
如果你喜欢函数式模式、易于阅读的代码或不可变的数据类型,并且希望在PHP中找到这些,那么你绝对应该尝试一下。
依赖项
- PHP >= 5
- PHPUnit用于开发
安装
执行 composer require anon767/phpstream
或者在composer.json中添加以下内容
"require": {
"anon767/phpstream": "*"
}
用法
返回数组中单个元素的Stream方法将它们包装在Cells中(比较Java optional)。
可以通过 $cell->unwrap()
或 $cell->orElse($default)
访问这些值。
如果Cell内部是null值,则解包时会抛出"NoElementException"异常
您可以将任何传统数组转换为Stream,如下所示。
use Stream/Stream; $array = [1,2,3,4,5,6,7,8,9,10]; $stream = new Stream($array);
或者这样
use Stream/Stream; $array = [1,2,3,4,5,6,7,8,9,10]; $stream = Stream::asStream($array);
实现了Java Stream Api中的大多数函数。
示例
从数组中获取第一个偶数
$array = [1,2,3,4,5,6,7,8,9,10]; $onlyEvenNumbers = Stream::asStream($array)->filter(function($v){return $v%2==0;}); $firstEvenNumber = $onlyEvenNumbers->first()->unwrap();
或者一行内
$firstEvenNumber = Stream::asStream([1,2,3,4,5,6,7,8,9,10])->filter(function($v){return $v%2==0;})->first()->unwrap();
将数组中的所有数字平方
$array = [1,2,3,4,5,6,7,8,9,10]; $squares = Stream::asStream($array)->map(function($v){return $v*$v;});
打印数组中的所有数字
$array = [1,2,3,4,5,6,7,8,9,10]; Stream::asStream($array)->forEach(function($v){echo $v;});
ArrayList
ArrayList类扩展了ArrayObject,因此可以使用与正常PHP数组相同的方式使用。尽管它可以直接转换为Stream
$a = new ArrayList(); $a[] = 1; $a[] = 2; $a[] = 3; echo $a->toStream()->first()->orElse(null); // prints 1
许可协议
MIT