【发布时间】:2019-08-30 11:20:17
【问题描述】:
我正在玩 Java Streams,我想知道是否有任何方法可以创建这样的代码块 ->
if(givenString.equals("productA")) {
return new productA();
} else if(givenString.equals("productB") {
return new productB();
} .....
像这样进入 Java 流 ->
Stream.of(givenString)
.filter(e -> e.equal("productA)")
.map(e -> new productA())
我遇到了这个可行的解决方案,但我不相信......
Stream.of(givenString)
.map(e -> e -> e.equals("productA)" ? new productA() : new productB())
.findAny()
.get()
【问题讨论】:
-
为什么要使用 Stream 来完成这个简单的任务。您的第一种方法有什么问题?
-
另外,您“不相信”该方法的哪些元素。你说它有效,所以我不知道有什么建议可以解决它。
-
好吧,我对此没有意见……我只是想探索流的可能性……
-
我认为您将流的使用与条件检查混淆了。从问题来看,您似乎有一个字符串,您需要在其中检查值,因此 if else 块或 switch case 将是那些野兽。即使您使用的是 java 8 或更高版本,也没有规定一切都会在 Steam 中或一些新功能中。
-
Stream 不能替代逻辑条件。在您的特定情况下,您实际上得到的是
Map<String, Supplier<Product>>而不是流。
标签: java string java-stream predicate supplier