9
Java 8はStream
インターフェイスを持ち、Javaコレクション(およびストリームに変換できるその他のもの)の操作に便利なmap/filter/reduce操作を提供します。ClojureでJavaストリームを使用する
ストリームを生成するJava APIと相互運用するには、Clojureから使用するのが厄介で冗長なストリームがあります。
は比較 - Javaの:同じAPIを使用しようと
Pattern.compile("\\s+").splitAsStream("one two three")
.filter(s -> !s.contains("o"))
.map(String::toUpperCase)
.findFirst()
.orElse(null); // => "THREE"
Clojureの、:
(.. (.splitAsStream #"\s+" "one two three")
(filter
(reify java.util.function.Predicate
(test [this value] (not (.contains value "o")))))
(map
(reify java.util.function.Function
(apply [this value] (.toUpperCase value))))
(findFirst)
(orElse nil)) ; => "THREE"
はClojureの中で、ストリームベースのJavaのAPIを消費するより良い方法はありますか?ストリームをseqに変換し、remove
、partition
、take
のようなClojure独自の変換関数を使用することは可能ですか?