Java 缩短嵌套lambda

Java 缩短嵌套lambda,java,list,collections,java-8,java-stream,Java,List,Collections,Java 8,Java Stream,我想映射要列出的任务列表: 如何缩短上述表达式以直接返回可调用的?您可以使用类中的静态方法,例如Executors.callable: 问题是lambda表达式->runt需要一个目标类型 以类似于 List<Callable<Tasks>> callableTasks = tasks.stream() .map(…).collect(Collectors.toList()); 如果runt返回的任务实例与作为参数传递给它的任务实例相同,则可以使用Executo

我想映射要列出的任务列表:


如何缩短上述表达式以直接返回可调用的?

您可以使用类中的静态方法,例如Executors.callable:


问题是lambda表达式->runt需要一个目标类型

以类似于

List<Callable<Tasks>> callableTasks = tasks.stream()
    .map(…).collect(Collectors.toList());
如果runt返回的任务实例与作为参数传递给它的任务实例相同,则可以使用Executors.callable,如下所示:


注意Executors.callable封装了一个Runnable,它不提供返回值。因此,构造的Callable将计算为指定给Executors.Callable作为第二个参数的结果,或者如果使用单参数版本,则计算为null。

sure,它返回可调用项。请阅读以下问题:如何缩短上述表达式以直接返回可调用项?类似于tasks.stream.mapt->->runt.collectors.toList;不正确..正确的语法是什么?mapt->Callable->runt适合你吗?很好的解决方案!我用tasks.stream.mapt->->->runt;缩短了时间;。collectCollectors.toList,但在本例中,语法有点奇怪。所以我使用你的解决方案。谢谢Executors.callable…返回一个计算结果始终为null的可调用函数,而不是一个计算结果为runt方法结果的可调用函数。@nimo23 your.mapt->->runt;根本不是有效的语法,也不能解决实际问题。当你从未真正尝试过结果时,你总是可以做得更短。@Holger是的,对。我将该代码放入EclipseIDE中,它没有显示任何警告或错误,即使它的语法不正确。但是.mapt->->runt;这是错误的。
tasks.stream().map(t -> callable(() -> run(t))).collect(Collectors.toList());
List<Callable<Tasks>> callableTasks = tasks.stream()
    .map(…).collect(Collectors.toList());
List<Callable<Task>> callableTasks = tasks.stream()
    .<Callable<Task>>map(t -> () -> run(t)).collect(Collectors.toList());
List<Callable<Task>> callableTasks = tasks.stream()
    .map(t -> Executors.callable(() -> run(t), t)).collect(Collectors.toList());