Dealing with Java Optional in clojure
我正在编写与外部Java库交互的Clojure代码。 方法之一返回Java
1 2 3 4 |
因此,我需要在Clojure中调用
所以我写了这样的代码:
1 2 3 4 5 6 7 8 9 | (defn ^java.util.function.Function jfn [f] (reify java.util.function.Function (apply [this arg] (f arg)))) (let [ret (.someMethod someObj)] (.. ret (map (jfn (fn [x] (s/lower-case x)))) (map (jfn (...))) (orElse"x"))) |
为了将clojure函数传递到期望Java lambda的地方,我使用了如上定义的
但是我不确定这是最好的方法,因为我必须在Java的
有没有更好/更简单的方法可以做到这一点? 如果我们可以直接调用Java
我不确定它是否适合您的用例,但是您可以在早期将"
即使您需要一个
1 2 3 4 5 6 7 8 9 10 11 | (defn optional->nilable [this] (when (.isPresent this) (.get this))) (def maybe (Optional/of" something")) (some-> (optional->nilable maybe) (clojure.string/trim) (not-empty) (clojure.string/upper-case)) ; =>"SOMETHING" |
然后,如果您需要转换回
1 | (Optional/ofNullable *1) |