sro*_*ley 1 java functional-programming java-8 java-stream
如果我正在编写一个过滤函数,我依赖于我的过滤器的外部变量.例如:
public List<String> getMatches(String search) {
return stringList.stream().filter(str -> str.contains(search)).collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
此过滤器取决于外部参数.我只是想知道如果你事先不知道标准,如何使用纯函数编写过滤器.
这个lambda:
str -> str.contains(search)
Run Code Online (Sandbox Code Playgroud)
是一个纯粹的功能.
如果它执行副作用,则函数不纯.这个没有.
那么问题是函数是否依赖于某些东西......以及这意味着什么.
但请考虑这个例子中实际发生的事情:
该search对象是一个String因此是不可变的.所以你不能通过改变来"破坏"过滤器String.
如果stream在lambda捕获其值后能够更改变量的值,则会出现编译错误.
所以,"依赖"并没有坏处.
(如果search是a stringBuilder,它可能是有害的,并且其他东西也会发生变异.或者如果lambda本身进行了变异.但这些是不同的例子.)
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |