sream + filter+map 操作list
时间: 2023-07-02 11:06:44 浏览: 90
假设有一个列表 `my_list`,下面是使用 `stream`、`filter` 和 `map` 操作的示例代码:
```java
List<Integer> my_list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> filtered_list = my_list.stream()
.filter(x -> x % 2 == 0) // 仅保留偶数
.map(x -> x * x) // 对每个偶数求平方
.collect(Collectors.toList());
```
在上面的代码中,我们首先使用 `stream` 方法将列表转换为流。然后,我们使用 `filter` 方法筛选出只有偶数的元素。接着,我们使用 `map` 方法对筛选后的每个元素进行平方操作。最后,我们使用 `collect` 方法将流转换回列表。
这段代码的输出将是一个只包含偶数元素的列表,并且每个元素都被平方了。
相关问题
java中使用steam提取List<Map>中的某个字段
在Java中,如果你有一个`List<Map<String, Object>>`类型的列表,其中每个map都包含一个或多个键值对,你可以通过遍历这个list并访问每个map来提取特定字段。假设你想获取所有map中某个键(比如"field_name")对应的值,可以这样做:
```java
List<Map<String, Object>> dataList = ...; // 你的数据列表
String fieldName = "field_name";
List<Object> fieldValueList = dataList.stream()
.flatMap(map -> map.entrySet().stream()) // 遍历每一个map和entry
.filter(entry -> entry.getKey().equals(fieldName)) // 过滤出指定key
.map(Map.Entry::getValue) // 提取value
.collect(Collectors.toList()); // 收集到一个新的列表
// 现在fieldValueList包含了所有map中对应fieldName的值
```
这里我们使用了Java 8的Stream API来进行处理,`flatMap`用于将map的键值对转换成流,然后`filter`筛选出我们需要的键,`map`操作则获取每个entry对应的value。
集合Steam流的filter的startWith方法
集合Steam流中的`filter`方法用于筛选出符合条件的元素,而`startWith`方法则用于在流的开头添加一个指定的元素。这两个方法可以结合使用,代码示例如下:
```java
List<String> list = Arrays.asList("hello", "world", "java");
list.stream()
.filter(str -> str.startsWith("h"))
.map(str -> "prefix: " + str)
.forEach(System.out::println);
```
输出结果为:
```
prefix: hello
```
在上面的代码中,我们使用`filter`方法筛选出以字母"h"开头的字符串,然后使用`map`方法在每个字符串前添加"prefix: "前缀,最后使用`forEach`方法打印结果。如果我们要在流的开头添加一个元素,可以使用`Stream.concat`方法将一个包含指定元素的流与原始流连接起来,代码示例如下:
```java
Stream<String> stream = Stream.concat(Stream.of("prefix: "), list.stream());
stream.filter(str -> str.startsWith("prefix"))
.forEach(System.out::println);
```
输出结果为:
```
prefix: hello
prefix: world
prefix: java
```
在上面的代码中,我们使用`Stream.concat`方法将一个包含"prefix: "元素的流与原始流连接起来,然后使用`filter`方法筛选出以"prefix"开头的字符串,最后使用`forEach`方法打印结果。
阅读全文