This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2022-06-14
Channels
- # announcements (2)
- # babashka (27)
- # beginners (20)
- # biff (1)
- # cljs-dev (2)
- # clojars (19)
- # clojure (50)
- # clojure-austin (10)
- # clojure-australia (8)
- # clojure-europe (23)
- # clojure-losangeles (1)
- # clojure-nl (1)
- # clojure-spec (7)
- # clojured (7)
- # clojurescript (19)
- # cursive (4)
- # datalevin (9)
- # datomic (15)
- # emacs (7)
- # fulcro (25)
- # gratitude (2)
- # helix (1)
- # holy-lambda (2)
- # hyperfiddle (14)
- # introduce-yourself (1)
- # jobs (5)
- # joyride (2)
- # juxt (3)
- # kaocha (9)
- # leiningen (14)
- # meander (9)
- # minecraft (34)
- # nbb (18)
- # off-topic (15)
- # polylith (12)
- # re-frame (4)
- # remote-jobs (1)
- # shadow-cljs (79)
- # vim (57)
Hi, I am a beginner to Clojure, and am trying to set up my team's project on IntelliJ. Its running for them, but for me I am encountering a Java error, and we haven't been able to fix it. I would appreciate any help. This is the error I am getting when doing "lein run": Compiling 2 source files to C:\Projects\strive_clojure\target\default\classes C:\Projects\strive_clojure\java_src\firebase\FirebaseAdmin.java:17: error: cannot find symbol var options = new FirebaseOptions.Builder() ^ symbol: class var location: class FirebaseAdmin C:\Projects\strive_clojure\java_src\firebase\FirebaseAdmin.java:33: error: cannot find symbol var builder = ActionCodeSettings.builder(); ^ symbol: class var location: class FirebaseAdmin Note: C:\Projects\strive_clojure\java_src\firebase\FirebaseAdmin.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 2 errors Compilation of Java sources(lein javac) failed. Java Version is: java 17.0.2 2022-01-18 LTS Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86) Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)
Looks like a Java version issue. Just learned the var
keyword was introduced in Java 10, maybe you have multiple Java versions installed and use the wrong one?
What does lein version
print?
I have a map like below, how can i sort descending as per key :value
(def abc ({:Number 1, :value 11} {:Number 2, :value 7} {:Number 3, :value 78}))
(->> [{:Number 1, :value 11} {:Number 2, :value 7} {:Number 3, :value 78}]
(sort-by :value >))
=> ({:Number 3, :value 78} {:Number 1, :value 11} {:Number 2, :value 7})
why this giving me null?
(sort-by :value > (into [] ({:Number 1, :value 11} {:Number 2, :value 12} {:Number 3, :value 78})))
Your list is missing quote
.
(sort-by :value > (into [] '({:Number 1, :value 11} {:Number 2, :value 12} {:Number 3, :value 78})))
=> ({:Number 3, :value 78} {:Number 2, :value 12} {:Number 1, :value 11})
And you don't have to convert it into vector:
(sort-by :value > '({:Number 1, :value 11} {:Number 2, :value 12} {:Number 3, :value 78}))
=> ({:Number 3, :value 78} {:Number 2, :value 12} {:Number 1, :value 11})
Oh, I see the mistake! Your abc
has value {:Number 3, :value 78}
, because you didn't use quote, so operator was first hash-map and abc
was evaluated like that "look for second object in first object (which is a hash map) and if you don't find it, return third object".
So use this definition:
(def abc [{:Number 1, :value 11} {:Number 2, :value 7} {:Number 3, :value 78}])
(sort-by :value > abc)
=> ({:Number 3, :value 78} {:Number 1, :value 11} {:Number 2, :value 7})
(def abc ({:Number 1, :value 11} {:Number 2, :value 7} {:Number 3, :value 78}))
abc
=> {:Number 3, :value 78}
Vs this one:
(def abc [{:Number 1, :value 11} {:Number 2, :value 7} {:Number 3, :value 78}])
abc
=> [{:Number 1, :value 11} {:Number 2, :value 7} {:Number 3, :value 78}]
And if you want to have lazy-seq, use sequence
:
(def abc (sequence [{:Number 1, :value 11} {:Number 2, :value 7} {:Number 3, :value 78}]))
abc
=> ({:Number 1, :value 11} {:Number 2, :value 7} {:Number 3, :value 78})
I have 2 maps, m1 and m2. m1 contains a lot of lists:
(def m1 {:a '() :b '() :c '()})
m2 contains the same keys, but the values are scalars I want to append to all the lists in m1:
(def m2 {:a 1 :b 42 :c 99})
Right now I am doing this:
(defn update-m1
[m1 m2]
{:a (conj (get-in m1 [:a]) (:a m2))
:b (conj (get-in m1 [:b]) (:b m2))
...
})
(In the real program, m1 is buried inside a larger map, hence get-in instead of (:a m1), etc.)
What is a more idiomatic way of doing the same thing?(def m1 {:a '() :b '() :c '()})
(def m2 {:a 1 :b 42 :c 99})
(reduce-kv (fn [m k v] (update m k conj v)) m1 m2)
=> {:a (1), :b (42), :c (99)}
Thank you guys! 🙂