Java 流 API 过滤器

标签 java lambda java-8 java-stream

我有代码:

static void doSmth() {
    ArrayList<String> list = new ArrayList<>();
    for (int i = 0; i < 30; i++) {
        list.add(String.valueOf(i));
    }
    list.stream().filter("1329"::contains).map(s -> s + "a").forEach(System.out::println);
}

为什么我得到:

 1a
 2a
 3a
 9a
 13a
 29a

我期望一个空输出,因为列表不包含“1329”。

最佳答案

因为

.filter("1329"::contains)

意思是

.filter(s -> "1329".contains(s))

不是

.filter(s -> s.contains("1329"))

我猜你认为这意味着什么。

所以你的列表保留:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... 25, 26, 27, 28, 29]
    ^  ^  ^                 ^               ^                           ^

其中 "1329" 包含 1,2, 3, 9, 13 和 29

关于Java 流 API 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56691000/

相关文章:

java - 从 WSDL URL 生成 WSDL 文件

PHP/MySQL 文本字段按条件搜索

c++ - LAMBDA错误: conditional expression of type 'void' is illegal

java - 我应该把 .war 文件放在 glassfish 服务器的哪里?

java - 如何使用正则表达式特定字符串拆分字符串

java - JPA Hibernate Postgres 精度不起作用

c++ - 模板参数值中的 Lambda 表达式

spring - PSQLException - spring boot 1.4.1 - spring data jpa - offsetdatetime/localdatetime 标识为字节流

java - Lambda 表达式将对象从一个列表添加到另一种类型的列表

java - IntStream 来自 Random 和 Random 并发