当前位置: 首页 > 知识库问答 >
问题:

Groovy流为.peek和.map提供MissingMethodException

蒋啸
2023-03-14
List<MolportEntryVerification> verificationList = molportEntries.stream()
          .peek{if(i++%50 == 0){println(df.format(i/count))}}
          .map({entry -> verifier.verifyEntry(entry, new Standardizer(molportConfig),  new Standardizer(bciConfig))})
          .collect(Collectors.toList())

groovy.lang.missingMethodException:方法的无签名:java.util.stream.referencePipeline$head.peek()适用于参数类型:(MolportFileverization$_run_closure1)值:[MolportFileverization$_run_closure1@d62472f]可能的解决方案:peek(java.util.function.consumer)、grep()、sleep(long)、use([ljava.lang.object;)、grep(java.lang.object)、wait()

长count=molportentries.stream().count();

工作时没有错误信息。

public class BasicMolportEntry {
    public BasicMolportEntry(String molportId, String etxcId, String smiles) {
        this.molportId = molportId == null ? "" : molportId;
        this.etxcId = etxcId == null ? "" : etxcId;
        this.smiles = smiles;
    }

加上所有平常的...

有什么建议吗?

共有1个答案

秦哲瀚
2023-03-14

以下代码:

class MolportEntryVerification {}
class BasicMolportEntry {}

def molportEntries = (1..200).collect { new BasicMolportEntry() }

def i = 0
List<MolportEntryVerification> result = molportEntries.stream()
  .peek { if(i++%50 == 0) { println(i-1) } }
  .map  { e -> new MolportEntryVerification() }
  .toList()

println "size: ${result.size()}"

模仿问题中的代码在groovy 2.5.7中可以正常工作,在groovy 2.3.9中缺少tolist()(代码中没有该代码,但它是收集器语法的缩写),并出现以下错误:

~> groovy solution.groovy

Caught: groovy.lang.MissingMethodException: No signature of method: java.util.stream.ReferencePipeline$Head.peek() is applicable for argument types: (solution$_run_closure2) values: [solution$_run_closure2@d706f19]
Possible solutions: peek(java.util.function.Consumer), grep(), sleep(long), use([Ljava.lang.Object;), grep(java.lang.Object), wait()
groovy.lang.MissingMethodException: No signature of method: java.util.stream.ReferencePipeline$Head.peek() is applicable for argument types: (solution$_run_closure2) values: [solution$_run_closure2@d706f19]
Possible solutions: peek(java.util.function.Consumer), grep(), sleep(long), use([Ljava.lang.Object;), grep(java.lang.Object), wait()
    at solution.run(solution.groovy:7)

在groovy 1.8.8中。这看起来与您所遇到的MissingMethodException相同。

 类似资料:
  • 我很想知道为什么Java的可选不提供类似于流的方法。 接口的method javadoc声明: @apiNote此方法主要用于支持调试,您希望在元素流经管道中的某个点时看到这些元素 这几乎完全描述了我的用例: (返回 方法,上述所有内容都会转换为: 也可以这样做(参见此答案): 并将其与方法一起使用: 但我认为这是一个黑客,而不是的干净用法。 从Java 9开始,可以将< code>Optiona

  • 我有以下情况:有一个对象列表-ProductData,其中包含几个字段: 还有一个API,它返回以下对象的列表: 但它会返回带有空“计划名称”字段的对象,因为在提取该对象时不允许这样做。我需要通过外部参照将产品数据与RatingTableRow链接,以便将计划名称设置到RatingTableRow中,因为我以后需要使用此对象,所以我创建了以下代码来实现这一点: 我知道java文档说,不适合这些需求

  • 我偶然发现了一个我无法解决的任务。我不得不修改代码以打印而不是。 我明白为什么要这样印。 我很感激任何帮助。

  • Groovy 为预定义的 List 和 Map 集合提供了一些操作捷径,这两个字面值都比较简单易懂,但是 Map 会有一些不同. 例如,当您使用 “apply” 方法使用插件时,apply 会自动加上 Map 的一个参数,当您这样写 “ apply plugin: ‘java’ “时,实际上使用的是 name 参数(name-value),只不过在 Groovy 中 使用 Map 没有 < > ,