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

使用stream将模式列表转换为谓词

凤修筠
2023-03-14

我试图将一系列模式(其类型为string)转换为谓词,出于某些原因,我的大脑一直以接近以下代码的方式结束:

    List<Predicate> predicates = patterns.stream()
        .map(Pattern::asPredicate)
        .collect(Collectors.toList());

显然无法编译。编写转换流的最佳方式是什么?

这是我收到的错误消息:

Provider.java:32: error: method map in interface Stream<T> cannot be applied to given types;
            .map(Pattern::asPredicate)
            ^
  required: Function<? super String,? extends R>
  found: Pattern::a[...]icate
  reason: cannot infer type-variable(s) R
    (argument mismatch; invalid method reference
      method asPredicate in class Pattern cannot be applied to given types
        required: no arguments
        found: String
        reason: actual and formal argument lists differ in length)
  where R,T are type-variables:
    R extends Object declared in method <R>map(Function<? super T,? extends R>)
    T extends Object declared in interface Stream
MsisdnPartitioningProvider.java:32: error: invalid method reference
            .map(Pattern::asPredicate)
                 ^
  non-static method asPredicate() cannot be referenced from a static context
Note: MsisdnPartitioningProvider.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors

共有1个答案

都建树
2023-03-14

您已经提到,模式是字符串,即它可能是列表

List<Predicate> predicates = patterns.stream().map(Pattern::compile).map(Pattern::asPredicate)
                .collect(Collectors.toList());

注意:您可以使用列表

 类似资料:
  • 鉴于 我有一个对象列表。 看起来像 我想将此转换为 i、 e.将个人类别整理成类别列表。 这是实现我想要的当前代码。 有什么方法可以使用流来做到这一点吗 这个问题在本质上类似于Group by和sum对象,比如SQLJavalambdas?但对我没有帮助,因为这里完成了聚合,而这里不是聚合。

  • 我已经创建了一种计算字母表中每个字符的方法。我正在学习流(函数式编程),并尝试尽可能经常地使用它们,但我不知道在这种情况下该怎么做:

  • 我想将XML转换为JSON(具体地说,是OAI-PMH响应)。我目前正在使用这个节点。JSXML2JS,但问题是JSON非常冗长,有很多嵌套和数组级别,即使只有一个元素作为子元素,并且永远不会超过一个。问题是,不知道XML文件的模式,因此必须保守。 我的问题是,是否有任何其他(最好是JavaScript)代码可以使用XML架构来指导转换过程?因此,如果架构定义了XML的类型和结构,那么JSON就会

  • 问题内容: 我有一个返回的接口。 我想使用Java 8 Stream API处理该结果。 但是Iterable不能“流式传输”。 任何想法如何将Iterable用作流而不转换为List? 问题答案: 有一个比直接使用更好的答案,这既简单又得到更好的结果。 Iterable有一个方法,所以你应该使用该方法来获取分离器。在最坏的情况下,它是相同的代码(默认实现使用),但是在更常见的情况下,你已经是一个

  • 我有一个返回的接口。 然而迭代不能“流”。 知道如何使用迭代作为流而不将其转换为列表吗?

  • 问题内容: 将a 转换为同时保持Queue顺序的最快方法是什么? 问题答案: 最快的方法是首先使用LinkedList,它可用作列表或队列。 否则您需要复印 注意:处理PriorityQueue时,请使用循环,轮询每个元素并添加到列表中。要列出的PriorityQueue不维护堆顺序。