use*_*242 18 java consumer java-8
我是Java 8的新手,我遇到了Consumer java doc,它说:"预计消费者将通过副作用进行操作." 有人可以解释为什么这么说?
Sle*_*idi 16
消费者具有accept
以下签名的方法
void accept(T t);
Run Code Online (Sandbox Code Playgroud)
该方法将t作为输入并且不返回任何内容(void),因此您无法从中返回任何内容并将方法调用替换为它返回的值.
副作用的一个例子是print语句,
list.stream.foreach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
foreach以消费者为参数.如果你考虑一下,你可以用这种方法做的唯一有用的事情是改变世界(即改变一个状态).
与此相反的是纯函数,一个不改变任何状态的函数,它接受一个输入,并返回一些东西,例如
Function<Integer,Integer> fn = x -> x*x;
Run Code Online (Sandbox Code Playgroud)
fn
这里没有任何副作用(它不会改变任何东西),它接收一个整数并安静地返回它的方块.
大多数函数式接口就是函数式接口,这严格意味着它们接受输入,进行一些计算并返回输出。他们不应该修改任何状态。Consumer
是例外,因为它不返回任何值;它的目的只是为了修改某些状态。
归档时间: |
|
查看次数: |
1345 次 |
最近记录: |