我有代码:

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"))

我猜你认为这意味着。

因此,您的 list 为:
[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 and 29

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

10-10 09:21