我有密码:
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我期望得到一个空输出,因为list不包含"1329“。
发布于 2019-06-20 17:22:44
因为
.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 and 29
发布于 2019-06-20 17:22:14
这是因为当您从0迭代到29时,.contains只是检查列表中的每个单独元素是否存在于字符串1329中。
从1,2,3.它们返回true,因此它们被映射并附加"a“。如果要检查整个字符串1329是否存在,请使用.equals()
filter("1329"::equals)发布于 2019-06-22 08:56:48
您获得了上面的输出,因为您使用"1329“Java字符串来检查它是否包含列表中的任何字符串。因为字符串"1329“包含"1”、"2“、"3”、"9“、"13”、"29",所以它会过滤掉它们,然后将"a“添加到每个筛选的字符串中。
为了检查列表中是否包含"1329",可以在java.utit.List上直接使用can ()方法。它应该获取空集,因为列表不包含"1329“字符串。
为了从列表中获取等于"1329“的字符串,可以使用filter方法和Strings方法。
list
.stream()
.filter(s -> "1329".equals(s))
.map(s -> s + "a")
.forEach(System.out::println);现在,在您的例子中,由于列表不包含"1329“字符串,上面的代码将不会给出任何输出。
https://stackoverflow.com/questions/56691000
复制相似问题