stream.map方法的作用与实际例子
时间: 2023-08-07 19:07:40 浏览: 77
stream.map方法是Java 8中Stream API中的一个操作方法,它的作用是将一个流中的每个元素都映射为另一个元素,返回一个新的流。
例如,我们有一个字符串列表,我们想将每个字符串转换为大写并返回一个新的字符串列表,可以使用map方法来实现:
```
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> newList = list.stream().map(String::toUpperCase).collect(Collectors.toList());
```
在上面的例子中,我们使用了stream方法将字符串列表转换为一个流,然后使用map方法将每个元素转换为大写形式,并返回一个新的流。最后使用collect方法将新的流收集成一个新的字符串列表。
实际上,map方法可以用于任何需要将流中的元素映射为另一个元素的场合,比如将一个对象的某个属性提取出来,或者将一个数字类型的流转换为字符串类型的流等。
相关问题
Map<String, Map<String, Object>> orgMap = JSONObject.parseObject(builder.toString()) .getJSONArray("data").toJavaList(Map.class).stream() .map(map -> new AbstractMap.SimpleEntry<String, Map<String, Object>>((String) map.get("orgId"), map)) .collect( Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue) );这个代码报错了,java: 不兼容的类型: 无法推断类型变量 T,K,U (参数不匹配; 方法引用无效 无法将 接口 java.util.Map.Entry<K,V>中的 方法 getKey应用到给定类型 需要: 没有参数 找到: java.lang.Object 原因: 实际参数列表和形式参数列表长度不同) 该怎么改呢?
这个错误是因为在使用方法引用时,编译器无法推断出方法的参数类型。你需要指定方法的参数类型来解决这个错误。在这个例子中,你可以将 `.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))` 修改为 `.collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()))` 来解决这个问题。
修改后的代码如下:
```
Map<String, Map<String, Object>> orgMap = JSONObject.parseObject(builder.toString())
.getJSONArray("data").toJavaList(Map.class).stream()
.map(map -> new AbstractMap.SimpleEntry<String, Map<String, Object>>((String) map.get("orgId"), map))
.collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
```
这样就可以正常编译运行了。
stream().map去空值
Stream API在Java中是一个强大的工具,用于处理集合数据。`stream().map()`方法主要用于对流中的每个元素应用某个函数并创建一个新的流。当流中可能存在null值时,我们可以使用`Optional<T>`来处理这种情况。
如果你想过滤掉空值(null),可以先将元素转化为`Optional`,然后再进行映射操作。这通常通过`map(Objects::requireNonNull)`或`filter(Objects::nonNull)`这两个方法结合实现。例如:
```java
List<String> list = Arrays.asList(null, "a", null, "b");
List<String> nonNullStrings = list.stream()
.map(Optional::ofNullable) // 将null转换为Optional.empty()
.filter(Optional::isPresent) // 筛选出非空的Optional
.map(Optional::get) // 取出实际的非null值
.collect(Collectors.toList());
```
在这个例子中,原始列表`list`中有两个null值,经过上述处理后,`nonNullStrings`列表只包含非空字符串"a"和"b"。
阅读全文