Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (require '[criterium.core :refer [quick-bench]])
- (require '[clojure.core.reducers :as r])
- (import 'java.util.concurrent.atomic.AtomicInteger)
- (set! *warn-on-reflection* true)
- (def data
- (into []
- (map hash-map
- (repeat :samplevalue)
- (concat
- (range 1e5)
- (range 1e5)
- (range 1e5)
- (range 1e5)
- (range 1e5)))))
- (quick-bench
- (reduce + (map (constantly 1) (filter #(= 75584 (:samplevalue %)) data))))
- ;; Execution time mean : 47.112245 ms
- (quick-bench
- (count (filter #(= 75584 (:samplevalue %)) data)))
- ;; Execution time mean : 32.594683 ms
- (quick-bench
- (count
- (seq
- (eduction
- (map :samplevalue)
- data
- (filter #(= 75584 %))))))
- ;; Execution time mean : 25.140066 ms
- (quick-bench
- (transduce
- (comp
- (map :samplevalue)
- (filter #(= 75584 %))
- (map (constantly 1)))
- +
- data))
- ;; Execution time mean : 25.215213 ms
- (quick-bench
- (r/fold +
- ((comp
- (map :samplevalue)
- (filter #(= 75584 %))
- (map (constantly 1))) +)
- data))
- ;; Execution time mean : 13.732841 ms
- (let [cnt (AtomicInteger. 0)
- combinef (fn ([] cnt) ([_ _]))
- rf (fn [^AtomicInteger cnt _] (.incrementAndGet cnt) cnt)
- reducef ((comp (map :samplevalue) (filter #(= 75584 %))) rf)]
- (quick-bench
- (do
- (r/fold combinef reducef data)
- (long cnt))))
- ;; Execution time mean : 13.525181 ms
Add Comment
Please, Sign In to add comment