Java Stream API过滤器

har*_*814 4 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);
}
Run Code Online (Sandbox Code Playgroud)

为什么我得到:

 1a
 2a
 3a
 9a
 13a
 29a
Run Code Online (Sandbox Code Playgroud)

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

YCF*_*F_L 10

因为

.filter("1329"::contains)
Run Code Online (Sandbox Code Playgroud)

意思

.filter(s -> "1329".contains(s))
Run Code Online (Sandbox Code Playgroud)

.filter(s -> s.contains("1329"))
Run Code Online (Sandbox Code Playgroud)

我猜你认为这意味着。

因此,您的清单为:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... 25, 26, 27, 28, 29]
    ^  ^  ^                 ^               ^                           ^
Run Code Online (Sandbox Code Playgroud)

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