将谓词或函数用作Java流过滤器有什么区别?

AdHominem

因此,假设我在流上使用了一些随机过滤器,最直接的方法是直接输入谓词:

x.stream().filter(e -> e % 2 == 0)

同样,我可以简单地进行引用并预先定义谓词:

Predicate<Integer> isEven = e -> e % 2 == 0;
...
x.stream().filter(isEven)

但是我也可以使用一个函数:

private static boolean isEven(Integer integer) {
    return integer % 2 == 0;
}
...
x.stream().filter(MyClass::isEven)

据我所知,谓词当然受到更多限制,而函数可能会有副作用等。但是由于诸如Venkat Subramaniam之类的人使用后一种解决方案,所以我真的很想知道:这里的主要区别是什么?

Grzegorz Piwowarek

不!与方法引用相比,谓词并没有真正的限制!实际上,这些都是一样的!

只需看一下filter()函数签名:filter(Predicate<? super T> predicate)

让我们考虑一下您的示例:

x.stream().filter(e -> e % 2 == 0)

Predicate<Integer> isEven = e -> e % 2 == 0;
...
x.stream().filter(isEven)

第一个只是后者的内联版本。

private static boolean isEven(Integer integer) {
return integer % 2 == 0;
}
...
x.stream().filter(MyClass::isEven)

在这里您可以看到Method References实际情况。MR只是一个语法糖,使您可以基于现有功能定义Lambda表达式。

最终,所有这些表达式都成为谓词功能接口的相同实现。

另外,您还可以通过使用右侧的块语法在Lambda表达式中执行副作用,但是通常不建议这样做:

e -> {
    //side effects here
    return e % 2 == 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Java Lambda流过滤器中外部化谓词

来自分类Dev

为什么不能对Java流过滤器应用谓词?

来自分类Dev

bsf过滤器之间有什么区别?(ffmpeg)

来自分类Dev

if过滤器和理解之间有什么区别?

来自分类Dev

bsf过滤器之间有什么区别?(ffmpeg)

来自分类Dev

grails过滤器和休眠grails过滤器插件有什么区别

来自分类Dev

Java 8 数组流过滤器

来自分类Dev

不带过滤器的Spring Boot API和带过滤器的Spring Boot API有什么区别?

来自分类Dev

mongoengine中的对象和过滤器有什么区别?

来自分类Dev

在Django过滤器语句中,__in和等号(=)有什么区别?

来自分类Dev

活动中的意图过滤器和广播接收器之间有什么区别?

来自分类Dev

SPARQL查询中的UNION和EXISTS过滤器有什么区别

来自分类Dev

在“编辑互动”中,过滤器和突出显示之间有什么区别?

来自分类Dev

使用过滤器时{}和()有什么区别?

来自分类Dev

在Laravel中使用过滤器的方法-有什么区别

来自分类Dev

编写自定义方法和自定义过滤器有什么区别?

来自分类Dev

startDate和Okta Events API中的“已发布”过滤器有什么区别?

来自分类Dev

查询表时Azure表过滤器和Linq有什么区别?

来自分类Dev

如何在Java 8 Stream API中将番石榴谓词用作过滤器

来自分类Dev

流过滤器java中的if-else

来自分类Dev

Java 8迭代器流过滤器NoSuchElementException

来自分类Dev

使用列表流过滤器与for循环

来自分类Dev

Scala流过滤器行为

来自分类Dev

空检查流过滤器

来自分类Dev

将谓词/过滤器附加到表的所有查询

来自分类Dev

RxJava谓词过滤器

来自分类Dev

XSLT-在谓词过滤器中,为什么有时必须使用XSLT current()函数而不是XPath上下文节点点运算符?

来自分类Dev

找出Java 8流过滤器是否已过滤某些内容的绝佳方法

来自分类Dev

使用Java 8谓词JPA库过滤器

Related 相关文章

  1. 1

    在Java Lambda流过滤器中外部化谓词

  2. 2

    为什么不能对Java流过滤器应用谓词?

  3. 3

    bsf过滤器之间有什么区别?(ffmpeg)

  4. 4

    if过滤器和理解之间有什么区别?

  5. 5

    bsf过滤器之间有什么区别?(ffmpeg)

  6. 6

    grails过滤器和休眠grails过滤器插件有什么区别

  7. 7

    Java 8 数组流过滤器

  8. 8

    不带过滤器的Spring Boot API和带过滤器的Spring Boot API有什么区别?

  9. 9

    mongoengine中的对象和过滤器有什么区别?

  10. 10

    在Django过滤器语句中,__in和等号(=)有什么区别?

  11. 11

    活动中的意图过滤器和广播接收器之间有什么区别?

  12. 12

    SPARQL查询中的UNION和EXISTS过滤器有什么区别

  13. 13

    在“编辑互动”中,过滤器和突出显示之间有什么区别?

  14. 14

    使用过滤器时{}和()有什么区别?

  15. 15

    在Laravel中使用过滤器的方法-有什么区别

  16. 16

    编写自定义方法和自定义过滤器有什么区别?

  17. 17

    startDate和Okta Events API中的“已发布”过滤器有什么区别?

  18. 18

    查询表时Azure表过滤器和Linq有什么区别?

  19. 19

    如何在Java 8 Stream API中将番石榴谓词用作过滤器

  20. 20

    流过滤器java中的if-else

  21. 21

    Java 8迭代器流过滤器NoSuchElementException

  22. 22

    使用列表流过滤器与for循环

  23. 23

    Scala流过滤器行为

  24. 24

    空检查流过滤器

  25. 25

    将谓词/过滤器附加到表的所有查询

  26. 26

    RxJava谓词过滤器

  27. 27

    XSLT-在谓词过滤器中,为什么有时必须使用XSLT current()函数而不是XPath上下文节点点运算符?

  28. 28

    找出Java 8流过滤器是否已过滤某些内容的绝佳方法

  29. 29

    使用Java 8谓词JPA库过滤器

热门标签

归档