【发布时间】:2020-12-15 21:54:27
【问题描述】:
与其他语言更直接的 lambda 相比,我发现 Java lambda 语法独特地晦涩难懂...
我的理解是你可以传递一个 lambda 代替对象作为方法的参数,语法类似于
method(() -> { /*code to return value*/ } )
但我无法获得可行的语法。
我想建立一个对象列表,并且我想用唯一的数据(比如 Math.random() 值)填充每个新对象。所以我正在尝试这样做:
ArrayList<MyType> mytypes = new ArrayList<>();
mytypes.add( () -> { MyType m = new MyType(); m.populate(Math.random()); return m } );
但这显然是不合法的,尽管它似乎与现有的最小示例相匹配。我也试过了
mytypes.add( t -> { MyType m = new MyType(); m.populate(Math.random()); return m } );
mytypes.add( MyType t -> { MyType m = new MyType(); m.populate(Math.random()); return m } );
mytypes.add( (MyType t) -> { MyType m = new MyType(); m.populate(Math.random()); return m } );
mytypes.add( { MyType m = new MyType(); m.populate(Math.random()); return m } );
基于网上看到的各种语法,这些语法几乎没有提供任何信息。
那么这有什么问题呢?这个怎么做?这是不可能的吗? (很遗憾,因为大多数其他使用 lambda 的语言似乎都可以直观地做到这一点。)
【问题讨论】:
-
“我的理解是你可以传递一个 lambda 代替对象作为方法的参数”不...
-
您一直在说“其他语言”,并且似乎声称您了解这些其他语言的 lambda。能给我举个例子吗?因为我不知道任何可以“传递 lambda 代替对象”的语言...
-
@Sweeper 您可以将 lambda 作为对象传递给接受
Object类型参数的方法,如果您将其转换为FunctionalInterface,例如(Function)x -> x。可能不算数,只是说说而已。 -
@Bohemian 在您的评论编辑之前,我在那里困惑了一秒钟......
标签: java methods lambda parameters arguments