我正在寻找Supplier<T>番石榴的反面.我希望它会被称为Consumer- 不 - 或Sink- 存在,但它是为了原始价值.
它隐藏在某处,我想念它吗?
我希望看到它有同样的原因Supplier.诚然,使用不太常见,但是Suppliers,例如,许多静态方法将以类似的方式应用,并且在一行中表达诸如"在此可迭代中发送该供应商的每个值"之类的事情将是有用的.
在此期间,Predicate和Function<T,Void>丑陋的解决方法.
我知道纯函数式编程的目标之一是消除可变性,从而排除副作用.但是让我们面对现实吧,即使存在所有的函数式编程库,Java也不是一种函数式语言.事实上,似乎有些FP库知道并期待这一点.例如,在Functional Java中,有一个Effect类.在Jedi FP库中,有Command界面.这允许您 - 除其他外 - 将类型安全的命令模式应用于Iterable没有令人讨厌的for循环样板的元素.
Command<PhoneNumber> makeCall = new Command<PhoneNumber> {
public void execute(PhoneNumber p) { p.call(); }
}
List<PhoneNumber> phoneList = ...
FunctionalPrimitives.forEach( phoneList, makeCall );
Run Code Online (Sandbox Code Playgroud)
所以问题是,番石榴中有类似的东西吗?
在接受澄清后接受回复
我正在开发一个框架,它可以帮助解决大多数Java FP库中固有的"垂直问题",在某些情况下.所以,我不竟让如上图所示的代码示例:即明确宣布一个新的类实现的Command所有其垂直噪声过甜的烦躁,只需在声明之后立即应用它的目的.
我更多地考虑实际的命令模式,其中可能有几个可能的命令在其他地方声明,并且只有其中一个被传递到想要迭代应用它的代码中.此外,我的框架的目标是使创建功能接口对象(函数,谓词,命令,其他简单的lambda)更加惯用,而不是简单地将垂直问题移动到其他地方.我早就意识到这不在番石榴的范围内.但是由于其他FP库中有类似Command的接口,我只想知道Guava中是否存在模拟.
使用我的框架的更完整的代码示例可能是这样的:
class Stuff {
private final Stuff CALLS_TO = callsTo(Stuff.class); // a proxy
public static final Command<Stuff> CMD1 = commandFor(CALLS_TO.someMethod1());
public static final Command<Stuff> CMD2 = commandFor(CALLS_TO.someMethod2());
// methods exist for use elsewhere, but …Run Code Online (Sandbox Code Playgroud)