Java~stream处理中map与flatMap的比较和使用案例

  • 方法参数不同,第一个参数是一样的,但是第二个不一样,对于map第二个参数没啥要求,但是使用flatMap时,第二个参数还得用流来接收。

  • 所以flatMap多用于多对多,一对多,也就是map是将一个数据流中的一个数据节点,映射成另外一个数据节点,而flatMap是将一个数据流中的一个数据节点映射成另外一个数据流,这个另外的数据流可以是一个数据节点也可以是多个数据节点。

  • flatmap既可以单一转换也可以一对多/多对多转换,flatmap要求返回Observable,因此可以再内部进行from/just的再次事件分发,一一取出单一对象(转换对象的能力不同)

使用案例


比如我们使用map将一个per对象映射成一个字符串对象

static class Per {

public String name;

public int age;

public Per(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return “Per{” +

“name='” + name + ‘’’ +

“, age=” + age +

‘}’;

}

}

public static void main(String[] args) {

List list = new ArrayList<>();

list.add(new Per(“listen”, 22));

list.add(new Per(“bike”, 24));

list.add(new Per(“milk”, 27));

List collect = list.stream().map(Per::toString).collect(Collectors.toList());

System.out.println(list);

System.out.println(“—”);

System.out.println(collect);

}

一对一可以实现,那我们该需求,假设一个per人有多个孩子,我们想获取这多个孩子,使用map可以实现吗?比如下面代码。

static class Child {

public String name;

public int age;

public Child(String name, int age) {

this.name = name;

this.age = age;

}

@Override

public String toString() {

return “Child{” +

“name='” + name + ‘’’ +

“, age=” + age +

‘}’;

}

}

static class Per {

public String name;

public int age;

public Child[] Children;

public Per(String name, int age) {

this.name = name;

this.age = age;

}

public Child[] getChildren() {

return Children;

}

public void setChildren(Child[] children) {

Children = children;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

最后

针对以上面试题,小编已经把面试题+答案整理好了

最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

最新大厂必问微服务面试题汇总:SpringCloud、Boot、Dubbo

面试专题

image

除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习

image

image

image

加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
0805597)]

除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习

[外链图片转存中…(img-sDlumLy2-1725650805598)]

[外链图片转存中…(img-WDJKAZQJ-1725650805598)]

[外链图片转存中…(img-cXNIxg8F-1725650805599)]

加入社区:https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值