我試圖在Java中使用flatMap
Optional
s。下面是一個簡單的例子:Java 8 flatMap + Optional.of不能編譯
List<String> x = Arrays.asList("a", "b", "c");
List<String> result = x.stream().flatMap((val) -> val.equals("b") ? Optional.empty() : Optional.of(val)).collect(Collectors.toList());
我從編譯器此錯誤消息:
Error:(10, 27) java: incompatible types: no instance(s) of type variable(s) T exist so that java.util.Optional<T> conforms to java.util.stream.Stream<? extends R>
有什麼不對?下面是我嘗試在Scala中實現的例子:
List("a", "b", "c").flatMap(x => if (x == "b") None else Some(x))
它返回:
res2: List[String] = List(a, c)
預期。
如何將其轉換爲Java以便編譯?
謝謝!通常我會過濾。在這種情況下(真實情況,不是簡單的玩具例子),我寧願使用Optionals,因爲過濾意味着要挖掘很多垃圾,我還必須在地圖階段進行挖掘。 – auramo 2014-10-28 15:31:07
當流的每個元素都映射到一個'Optional'時,就不需要使用'flatMap'。只需使用'.map(val - > val.equals(「b」)?Optional.empty():可選。(val))' – Holger 2014-10-28 15:43:37
@Holger你是對的。我沒有想過。我遵循OP的決定使用flatMap。 – Eran 2014-10-28 15:45:26