在java 8 Stream中,flatMap方法是一个维度升降的方法

举例说明

给 定 单 词 列 表[“Hello”,“World”] ,要返回列表 [“H”,“e”,“l”, “o”,“W”,“r”,“d”] 。

使用map方法,代码如下:

public class StreamStr {
public static void main(String[] args) {
List<String> list = Arrays.asList("tom", "jame", "jerry", "hello");
Stream<String> stream = list.stream();
Stream<String[]> streamString = stream.map(s->s.split(""));
Stream<Stream<String>> map = streamString.map(Arrays::stream); // List<Stream<String>> collect = map.collect(Collectors.toList());
// System.out.println(collect); map.forEach(x->{
x.forEach(s->{
System.out.println(s);
});
}); }
}
t
o
m
j
a
m
e
j
e
r
r
y
h
e
l
l
o

转变类型为:String -> String[]-> Stream<String>,当前维度从一维变成二维,map本身不能降为,执行如下

引入flatMap方法

具体代码变化如下:

public class StreamStr {
public static void main(String[] args) {
List<String> list = Arrays.asList("tom", "jame", "jerry", "hello");
Stream<String> stream = list.stream();
Stream<String[]> streamString = stream.map(s->s.split(""));
Stream<String> map = streamString.flatMap(Arrays::stream); map.forEach(x->{
System.out.println(x);
}); }
}
t
o
m
j
a
m
e
j
e
r
r
y
h
e
l
l
o

这里是从二维降为一维,逻辑如下:

flatMap升维

给定两个数字列表,如何返回所有的数对呢?例如,给定列表[1, 2, 3]和列表[3, 4],应该返回[(1, 3), (1, 4), (2, 3), (2, 4), (3, 3), (3, 4)]。

public class StreamInt {
public static void main(String[] args) {
List<Integer> numbers1 = Arrays.asList(1, 2, 3);
List<Integer> numbers2 = Arrays.asList(3, 4);
// flatMap升维度
List<int[]> pairs = numbers1.stream().flatMap(x -> numbers2.stream().map(y -> new int[] { x, y }))
.collect(Collectors.toList());
for (int[] pair : pairs) {
System.out.println(Arrays.toString(pair));
}
}
}

测试结果:

[1, 3]
[1, 4]
[2, 3]
[2, 4]
[3, 3]
[3, 4]

这里是从一维升为二维,逻辑如下:

总结:flatMapmap结果归类,从而达到升降维目的

【Java 8】Stream中flatMap方法的更多相关文章

  1. java 8 stream中的Spliterator简介

    目录 简介 tryAdvance trySplit estimateSize characteristics 举个例子 总结 java 8 stream中的Spliterator简介 简介 Split ...

  2. java 8 Stream中操作类型和peek的使用

    目录 简介 中间操作和终止操作 peek 结论 java 8 Stream中操作类型和peek的使用 简介 java 8 stream作为流式操作有两种操作类型,中间操作和终止操作.这两种有什么区别呢 ...

  3. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  4. java流stream中的collect()方法详解

    public class StreamTest { /** * stream.collect() 的本质由三个参数构成, * 1. Supplier 生产者, 返回最终结果 * 2. BiConsum ...

  5. java关于ArrayList中toArray方法的使用

    先来看下面这段程序 Collection collect= new ArrayList();   collect.add("小黑");   collect.add("小白 ...

  6. java集合_collection 中的方法 通过Arraylist来体现

    import java.util.*; /* Collection定义了集合框架的共性功能.1,添加    add(e);    addAll(collection); 2,删除    remove( ...

  7. java List集合中contains方法总是返回false

    ArrayList的contains方法 java 今天在用ArrayList类的caontains方法是遇到了问题,我写了一个存放User类的ArrayList 但在调用list.contains( ...

  8. Java Object类中toString方法的重写

    Object类中的tostring方法的: 当我们输出一个对象时,实际是输出的是这个类中的tostring方法,是一个地址值,而不是类中的属性. 1 一:子类没有重写Object类中的toStrinn ...

  9. Java字节码中的方法调用

    invokestatic,用于static修饰的方法.任何时候调用的时候只需要类名+方法名即可,无需new.JVM直接将其映射到方法区,执行速度极快.当该方法需要参数的时候,invokestatic会 ...

随机推荐

  1. RocketMQ架构原理解析(二):消息存储

    一.概述 由前文可知,RocketMQ有几个非常重要的概念: broker 服务端,负责存储.收发消息 producer 客户端1,负责产生消息 consumer 客服端2,负责消费消息 既然是消息队 ...

  2. ubuntu更換清華軟件源

    打开软件源的编辑sudo gedit /etc/apt/sources.list 软件源: Ubuntu--更改国内镜像源(阿里.网易.清华.中科大) 打開軟件源文件進行修改: 使用 sudo vim ...

  3. logstash的filter之grok

    logstash的filter之grokLogstash中的filter可以支持对数据进行解析过滤. grok:支持120多种内置的表达式,有一些简单常用的内容就可以使用内置的表达式进行解析 http ...

  4. puts()_C语言

    puts()函数用来向标准输出设备, scanf函数是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. puts就是输出字符串啊.int puts(    const char* ...

  5. 力扣 - 剑指 Offer 54. 二叉搜索树的第k大节点

    题目 剑指 Offer 54. 二叉搜索树的第k大节点 思路1 二叉搜索树的特性就是中序遍历结果为递增序列,而题目要求的是第 k 大节点,所以就应该是要遍历结果为降序, 按照先遍历左子树.输出节点.遍 ...

  6. 基于CarbonData的电信时空大数据探索

    摘要:作为IOT最底层的无线通信网络生成大量与位置相关的数据,用于无线通信网络规划和优化,帮助电信运营商建设更好体验的精品网络,构建万物互联的信息社会. 本文分享自华为云社区<基于CarbonD ...

  7. springboot配置自动提示插件-IDEA

    社区版的IDEA编辑spring boot项目的properties或者yml文件不会自动提醒.可手动安装IDEA的插件解决. Setting >> Plugins >> 搜索 ...

  8. [ Skill ] 图形化组件在注册 User Trigger 时需要注意的事情

    https://www.cnblogs.com/yeungchie/ 使用 deRegUserTriggers 可以用来配置:当打开一个新窗口时,自动集成自定义的菜单.工具栏等等. 使用格式如下: d ...

  9. 使用 SpringBoot 构建一个RESTful API

    目录 背景 创建 SpringBoot 项目/模块 SpringBoot pom.xml api pom.xml 创建 RESTful API 应用 @SpringBootApplication @C ...

  10. 【POJ2018】【实数域上的二分】【dp】

    传送门:http://poj.org/problem?id=2018: 大概题意是求一个正整数数列 A 的平均数最大 长度不小于 L 的子段 我们可以二分答案 判定是否有一个长度不小于L的子段 平均数 ...