Java 围绕条件链接的功能接口
Java Functional Interface chaining around conditions
最近一直在尝试使用函数式接口链接,我正在尝试了解以下是否可行。
如果我有这样的 FI:
@FunctionalInterface
public interface MyProcessor<T, R> {
R process (T t);
default MyProcessor<T, R> andThenProcess(MyProcessor<T, R> after) {
Objects.requireNonNull(after);
return (T t) -> { process(t); return after.process(t); };
}
}
我想知道我是否可以围绕检查逻辑构建流程链...因此以下是简单明了的示例
public static void main(String[] args) {
MyProcessor<String, String> uprocessor = string -> string.toUpperCase();
MyProcessor<String, String> lprocessor = string -> string.toLowerCase();
MyProcessor<String, String> processor = lprocessor.andThenProcess(uprocessor);
System.out.println(processor.process("Justin Skidmore"));
}
但我正在尝试执行以下操作,并想知道这是否合理:
MyProcessor<String, String> uprocessor = string -> string.toUpperCase();
MyProcessor<String, String> lprocessor = string -> string.toLowerCase();
MyProcessor<String, String> processor = lprocessor;
if (true) {
processor.andThenDoThis(uprocessor);
}
System.out.println(processor.process("Justin"));
以上方法行不通,我有点理解为什么,但是有没有一种合适的方法可以让我达到我在这里想要完成的目标。我进行了搜索,但遗憾的是还没有遇到任何情况或答案。
谢谢大家。
看起来您的 andThenDoThis
方法正在返回一个新实例,而不是修改现有实例。你是说
processor = processor.andThenDoThis(uprocessor);
最近一直在尝试使用函数式接口链接,我正在尝试了解以下是否可行。
如果我有这样的 FI:
@FunctionalInterface
public interface MyProcessor<T, R> {
R process (T t);
default MyProcessor<T, R> andThenProcess(MyProcessor<T, R> after) {
Objects.requireNonNull(after);
return (T t) -> { process(t); return after.process(t); };
}
}
我想知道我是否可以围绕检查逻辑构建流程链...因此以下是简单明了的示例
public static void main(String[] args) {
MyProcessor<String, String> uprocessor = string -> string.toUpperCase();
MyProcessor<String, String> lprocessor = string -> string.toLowerCase();
MyProcessor<String, String> processor = lprocessor.andThenProcess(uprocessor);
System.out.println(processor.process("Justin Skidmore"));
}
但我正在尝试执行以下操作,并想知道这是否合理:
MyProcessor<String, String> uprocessor = string -> string.toUpperCase();
MyProcessor<String, String> lprocessor = string -> string.toLowerCase();
MyProcessor<String, String> processor = lprocessor;
if (true) {
processor.andThenDoThis(uprocessor);
}
System.out.println(processor.process("Justin"));
以上方法行不通,我有点理解为什么,但是有没有一种合适的方法可以让我达到我在这里想要完成的目标。我进行了搜索,但遗憾的是还没有遇到任何情况或答案。
谢谢大家。
看起来您的 andThenDoThis
方法正在返回一个新实例,而不是修改现有实例。你是说
processor = processor.andThenDoThis(uprocessor);