Java 8, Stream
arabirimini getirdi ve Java koleksiyonlarında (ve akışa dönüştürülebilen diğer şeyler) uygun harita/filtre/azaltma işlemlerini getirdi.Clojure'da Java akışlarının tüketilmesi
Üretilen Java API'leriyle birlikte çalışırken, Clojure'dan kullanmak için akışları garip ve ayrıntılı olarak buluyorum.
karşılaştırın - Java:
Pattern.compile("\\s+").splitAsStream("one two three")
.filter(s -> !s.contains("o"))
.map(String::toUpperCase)
.findFirst()
.orElse(null); // => "THREE"
Clojure, aynı API kullanmaya çalışıyor: Clojure içinde akış tabanlı Java API'leri tüketen için daha iyi bir yaklaşım
(.. (.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"
var mı? Bir akışı bir sıraya dönüştürmek ve Clojure’ın remove
, partition
, take
gibi kendi dönüştürme işlevlerini kullanmak mümkün mü?