我看到到处都写着flatMap将流展平并映射,但在实际应用中,例如在下面仅使用flatMap的程序中,我们无法执行映射操作(将其更改为大写).我们需要在这里单独使用map方法.

List<String> uppercase = Stream.of(asList("A", "B"), asList("C", "D"))
            .flatMap(List::stream)
            .map(String::toUpperCase)
            .collect(Collectors.toList());
    System.out.println(uppercase);

我对flatMap的理解错了吗?任何人都能帮助理解这一点吗?flatMap是只会让溪流变平,还是能让&amp;两者都有 map 吗?如果是这样的话,我们该如何编写代码呢?

推荐答案

只有那些特定的方法引用限制了你.使用lambda表达式,仍然可以同时执行以下两项操作:

.flatMap(list -> list.stream().map(String::toUpperCase))
.collect(Collectors.toList());

我应该提到的是,只有方法引用的序列限制了你,而不是说用方法引用是不可能做到的.关键是你传递给它的映射器.以这些为例:

Stream<String> uppercaseArray(String[] a) {
    return Arrays.stream(a).map(String::toUpperCase);
}
Stream.of(new String[] {"ab"}, new String[] {"cd", "ef"})
    .flatMap(this::uppercaseArray); //map and transform

// Or a completely different perspective
Stream.of("abc", "def").flatMapToInt(String::chars);

Java相关问答推荐

如何在Inspaut中获取当前路径的 * 模式 *?

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

为什么一个java函数会返回一个作为参数传递给它的对象?

使用@MappdSuperClass扩展ParentClass&Won t继承ParentClass属性

解析Javadoc时链接的全限定类名

Java中是否有某种类型的池可以避免重复最近的算术运算?

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

如何调整工作时间日历中的时间

我无法获取我的Java Spring应用程序的Logback跟踪日志(log)输出

Com.google.firebase.database.DatabaseException:无法将类型为java.lang.Boolean的值转换为字符串.这是关于什么的?

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

尽管通过中断请求线程死亡,但线程仍将继续存在

如何创建模块信息类文件并将其添加到JAR中?

无法播放音频:从资源加载库GStreamer-Lite失败

如何使这两种方法合二为一?

Java在操作多个属性和锁定锁对象时使用同步和易失性

有没有办法在o(log(N))中以系统的方式将数组中的小块元素复制和移动到新增长的数组中的左侧?

如何调整JButton的大小以适应图标?

如何在MPAndroidChart中的条形图上正确添加标签

在数组中查找素数时出现逻辑错误