如果我正在编写一个过滤器函数,我的过滤器依赖于一个外部变量。例如:
public List<String> getMatches(String search) {
return stringList.stream().filter(str -> str.contains(search)).collect(Collectors.toList());
}
此过滤器取决于外部参数。我只是想知道如果您事先不知道条件,如何使用纯函数编写过滤器。
最佳答案
这个 lambda :
str -> str.contains(search)
是一个纯函数。
如果一个函数执行副作用,它就不是纯函数。这个没有。
然后是一个函数是否依赖于某物的问题……以及这意味着什么。
但是考虑一下这个例子中实际发生了什么:
search
对象是一个String
,因此是不可变的。因此,您不能通过改变String
来“破坏”过滤器。如果您能够在 lambda 捕获其值后更改
stream
变量的值,则会出现编译错误。
所以,“依赖”没有坏处。
(如果 search
是一个 stringBuilder
并且其他东西对其进行了变异,那么这可能是有害的。或者如果 lambda 本身进行了变异。但这些是不同的示例。)
关于java - 使用 Java 8 的 Stream API,如何编写一个纯净的过滤函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003486/