如何使用相同的函数将此java代码更改为clojure?
如何将此java代码更改为clojure?让clojure代码做同样的事情 B.java:如何使用相同的函数将此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) {
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
相关的东西吗?