stream map() filter()
时间: 2023-08-19 11:17:35 浏览: 41
stream的map()方法和filter()方法是Java 8中Stream API提供的两个常用操作方法。
map()方法可以将一个Stream中的元素按照指定的映射规则进行转换。在引用[2]的代码中,通过map()方法将字符串类型的元素转换为整数类型。具体实现是通过Lambda表达式将字符串转换为对应的整数。最后,通过forEach()方法将转换后的整数打印出来。
filter()方法可以根据指定的条件对Stream中的元素进行过滤。在引用[1]的代码中,通过filter()方法筛选出以"张"开头的字符串。具体实现是通过Lambda表达式判断字符串是否以"张"开头。最后,通过forEach()方法将筛选出的字符串打印出来。
这两个方法都是Stream API中的中间操作方法,它们不会立即执行,而是在终止操作方法(如forEach())被调用时才会执行。这种延迟执行的特性可以提高代码的效率。
相关问题
java stream map filter
Java Stream API 提供了 `map` 和 `filter` 方法来对流中的元素进行映射和过滤。
`map` 方法用于将流中的每个元素都映射到另一个元素上,返回一个新的流。
例如,假设有一个整数列表,我们想将每个元素都加倍:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> doubledNumbers = numbers.stream()
.map(n -> n * 2)
.collect(Collectors.toList());
```
上述代码中,我们首先将整数列表转换为流,然后使用 `map` 方法将每个元素都乘以2,最后使用 `collect` 方法将结果收集到一个新的列表中。
`filter` 方法用于根据指定的条件过滤流中的元素,返回一个新的流。
例如,假设有一个字符串列表,我们想只保留长度大于3的字符串:
```java
List<String> strings = Arrays.asList("apple", "banana", "car", "dog", "elephant");
List<String> filteredStrings = strings.stream()
.filter(s -> s.length() > 3)
.collect(Collectors.toList());
```
上述代码中,我们首先将字符串列表转换为流,然后使用 `filter` 方法根据字符串长度大于3的条件过滤元素,最后使用 `collect` 方法将结果收集到一个新的列
stream.filtermap
stream.filtermap是一个函数式编程中常用的操作,它结合了filter和map两个操作。在Java 8及以上的版本中,Stream类提供了filtermap方法来实现这个功能。
filtermap操作可以用于对一个流中的元素进行筛选和转换。首先,filtermap会根据给定的条件对流中的元素进行筛选,只保留满足条件的元素。然后,对保留下来的元素进行转换操作,生成一个新的流。
具体来说,filtermap操作接收两个参数:一个是Predicate函数式接口,用于筛选元素;另一个是Function函数式接口,用于对筛选后的元素进行转换。Predicate接口定义了一个test方法,用于判断元素是否满足条件;Function接口定义了一个apply方法,用于对元素进行转换。
下面是一个示例代码,演示了如何使用filtermap操作:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<String> result = numbers.stream()
.filter(n -> n % 2 == 0) // 筛选偶数
.map(n -> "Number: " + n) // 转换为字符串
.collect(Collectors.toList());
System.out.println(result);
```
输出结果为:["Number: 2", "Number: 4"]
在上面的示例中,我们首先使用filter方法筛选出偶数,然后使用map方法将每个偶数转换为字符串。最后,使用collect方法将转换后的元素收集到一个新的列表中。