If/else 表示流和 Java 8
2022-09-01 15:48:13
我有以下两个实现的接口:
public interface Parser {
void parse();
boolean canParse(String message);
}
class StackParser implements Parser {
public void parse(){
System.out.println("Parsing stackoverflow");
}
public boolean canParse(String message){
return message.equals("stackoverflow");
}
}
class YoutubeParser implements Parser {
public void parse() {
System.out.println("Parsing youtube");
}
public boolean canParse(String message) {
return message.equals("youtube");
}
}
我去检查传入的消息并解析或:"stackoverflow"
"youtube"
public class Main {
private List<Parser> parsers;
public static void main(String[] args) {
new Main().doSomething("youtube");
}
void doSomething(String message){
parsers.stream()
.filter(p -> p.canParse(message))
.forEach(p -> p.parse());
}
}
好吧,相当不错。但是,如果消息不是 或 呢?应用程序将处于静默状态,但我想在未找到匹配项时发送另一条默认消息,例如 ."stackoverflow"
"youtube"
"I can't parse this web!"
我知道这不会起作用(甚至编译),但它也应该只打印一次,而不是针对每个条件。"I can't parse this web"
false
parsers.stream()
.filter(p -> {
if (p.canParse(message) == false) {
System.out.println("I can't parse it!");
}
})
.forEach(p -> p.parse());
我该怎么做?