如何使用相同的函数将此java代码更改为clojure?

如何使用相同的函数将此java代码更改为clojure?,java,clojure,Java,Clojure,如何将此java代码更改为clojure?让clojure代码做同样的事情 B.java: package b; public class B { int c; } A.java: package b; import java.util.*; public class A { public static void findElement(List<B> a) { a.forEach((z) -> { if (z.c == 1) {

如何将此java代码更改为clojure?让clojure代码做同样的事情

B.java:

package b;

public class B {
 int c;
}
A.java:

package b;

import java.util.*;

public class A {

 public static void findElement(List<B> a)
 {
    a.forEach((z) -> {
        if (z.c == 1) {
            System.out.println(z.c);
        }
    });
 }
 public static void main(String[] args) {
    // TODO Auto-generated method stub
    B x = new B();
    x.c = 1;
    B y = new B();
    y.c = 2;
    List<B> d = new ArrayList<B>();
    d.add(x);
    d.add(y);
    findElement(d);
 }
}
b包;
导入java.util.*;
公共A类{
公共静态无效findElement(列表a)
{
a、 forEach((z)->{
如果(z.c==1){
系统输出打印LN(z.c);
}
});
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
B x=新的B();
x、 c=1;
B y=新的B();
y、 c=2;
列表d=新的ArrayList();
d、 加(x);
d、 加(y);
最后删除(d);
}
}
我曾多次尝试使用defrecord和defprotocol,但都失败了


谢谢

您在示例中使用了大量的突变。Clojure是一种高度鼓励不变性的语言

以下是一个简短的片段:

(defrecord B [c])

(defn find-element [bs]
  (filter #(= (:c %) 1) bs))

(let [x (->B 1)
      y (->B 2)
      d [x y]
      r (find-element d)]
  (doseq [i r]
    (println (:c i)))) 
但是,我们没有打印
find element
中的元素,而是返回找到的结果并将它们存储在
r
中。稍后,我们使用
doseq
检查每个项目以打印它

在Clojure中,这不是一种非常惯用的思考方式,我不确定您想要实现什么,但这有点臃肿和OO-full


我建议您继续学习,或者继续练习,将Clojure的不同方法内化。

请添加您已经尝试过的内容-这将让您更深入地了解您真正想要的是什么,并且可能有助于编写更好的答案(如果只是为了复制和粘贴一些代码的话)。这里的目标是什么?类中的代码看起来非常随机,基本上是clojure中的一行代码。你在找
:gen class
相关的东西吗?