Java8中的stream.map() 详细举例
时间: 2023-10-24 09:18:21 浏览: 91
好的,我来详细举一个例子。
假设我们有一个List集合,其中存储了一些整数,我们想要将这些整数都乘以2并存储到一个新的List集合中,我们可以使用stream.map()方法来实现。
首先,我们需要创建一个List集合并向其中添加一些整数,例如:
```
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
```
接下来,我们可以使用stream.map()方法将集合中的每个整数都乘以2,代码如下:
```
List<Integer> newList = list.stream()
.map(i -> i * 2)
.collect(Collectors.toList());
```
在上面的代码中,我们首先通过stream()方法将List集合转换为一个Stream流,然后使用map()方法将集合中的每个整数都乘以2,并返回一个新的Stream流。最后,我们使用collect()方法将新的Stream流转换为一个List集合。
这样,newList中就存储了原集合中每个整数都乘以2后的结果。
希望这个例子能够帮助你更好地理解Java8中的stream.map()方法。
相关问题
stream.map 和stream.flatmap的详细区别 并代码举例
stream.map 和stream.flatmap 是 Java 8 Stream API 中常用的函数式接口。它们的区别在于,map 会将元素进行一对一的转换,而 flatMap 则会将元素进行一对多的转换,并将多个流合并为一个流。
具体来说,map 函数会将每个元素应用给定的函数,然后返回一个新的流。例如,如果我们有一个字符串流,想将每个字符串都转换为其长度,则可以使用如下代码:
```java
Stream<String> stringStream = Stream.of("hello", "world", "java");
Stream<Integer> lengthStream = stringStream.map(String::length);
```
flatMap 函数则会将每个元素应用给定的函数,并将结果流合并为一个流。例如,如果我们有一个字符串流,想将每个字符串拆分成单词,然后将多个流合并为一个流,则可以使用如下代码:
```java
Stream<String> stringStream = Stream.of("hello world", "java rocks");
Stream<String[]> splitStream = stringStream.map(s -> s.split("\\s+"));
Stream<String> flatMapStream = splitStream.flatMap(Arrays::stream);
```
在上面的代码中,我们首先将每个字符串拆分成单词,产生了一个包含字符串数组的流。接着,我们使用 flatMap 将多个字符串数组流合并为一个单词流。
注意,如果元素类型不是 Stream,使用 flatMap 会导致编译错误。此外,flatMap 还有一个参数,可以指定最终合并为一个流的类型,否则将自动根据输入流的类型推断。
java stream Collectors.toMap
java stream Collectors.toMap是一个流式处理方法,用于将一个List集合转换为Map集合。它接受三个参数:第一个参数指定了作为Map的key值的属性或方法引用,第二个参数指定了作为Map的value值的属性或方法引用,第三个参数用于处理key重复的情况。 通过使用Collectors.toMap方法,可以将一个List集合中的元素按照指定的属性或方法引用作为key值,将整个对象或属性值作为value值,构建出一个key值唯一的Map集合。
举例来说,如果有一个List<proVo>对象的集合,我们希望将其中的proVo对象按照id作为key,name作为value,构建成一个Map集合,可以使用如下代码:
Map<Long, String> map = list.stream().collect(Collectors.toMap(proVo::getId, proVo::getName));
这样就可以得到一个key为id,value为name的Map集合。
另外,如果在转换过程中遇到了key重复的情况,可以通过第三个参数来处理。比如可以选择保留前一个元素的值,或者保留后一个元素的值,或者进行其他自定义的处理。 例如:
Map<Long, String> map = list.stream().collect(Collectors.toMap(proVo::getId, proVo::getName, (k1, k2) -> k1));
这样当遇到key重复的情况时,会保留前一个元素的值作为value。
总之,java stream Collectors.toMap方法是用于将List集合转换为Map集合的一个便捷方法,可以根据需求选择合适的参数来进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [java8stream源码-streams:用于针对旧设备的Android项目的java.util.stream库的非常不完整的重新实现](https://download.csdn.net/download/weixin_38690522/19389466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [【业务功能篇35】Java Stream流 :Collectors.toMap](https://blog.csdn.net/studyday1/article/details/131454535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文