广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java基础理论Stream管道流Map操作示例
  • 449
分享到

java基础理论Stream管道流Map操作示例

2024-04-02 19:04:59 449人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、回顾Stream管道流map的基础用法二、处理非字符串类型集合元素三、再复杂一点:处理对象数据格式转换四、flatMap一、回顾Stream管道流map的基础用法 最简单的需

一、回顾Stream管道流map的基础用法

最简单的需求:将集合中的每一个字符串,全部转换成大写!

List<String> alpha = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur");
//不使用Stream管道流
List<String> alphaUpper = new ArrayList<>();
for (String s : alpha) {
    alphaUpper.add(s.toUpperCase());
}
System.out.println(alphaUpper); //[MONKEY, LION, GIRAFFE, LEMUR]
// 使用Stream管道流
List<String> collect = alpha.stream().map(String::toUpperCase).collect(Collectors.toList());
//上面使用了方法引用,和下面的lambda表达式语法效果是一样的
//List<String> collect = alpha.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
System.out.println(collect); //[MONKEY, LION, GIRAFFE, LEMUR]

所以map函数的作用就是针对管道流中的每一个数据元素进行转换操作。

file

二、处理非字符串类型集合元素

map()函数不仅可以处理数据,还可以转换数据的类型。如下:

List<Integer> lengths = alpha.stream()
        .map(String::length)
        .collect(Collectors.toList());
System.out.println(lengths); //[6, 4, 7, 5]
Stream.of("Monkey", "Lion", "Giraffe", "Lemur")
        .mapToInt(String::length)
        .forEach(System.out::println);

输出如下:

6
4
7
5

除了mapToInt。还有maoToLong,mapToDouble等等用法

三、再复杂一点:处理对象数据格式转换

还是使用上一节中的Employee类,创建10个对象。需求如下:

  • 将每一个Employee的年龄增加一岁
  • 将性别中的“M”换成“male”,F换成Female。
public static void main(String[] args){
    Employee e1 = new Employee(1,23,"M","Rick","Beethovan");
    Employee e2 = new Employee(2,13,"F","Martina","HenGIS");
    Employee e3 = new Employee(3,43,"M","Ricky","Martin");
    Employee e4 = new Employee(4,26,"M","Jon","Lowman");
    Employee e5 = new Employee(5,19,"F","Cristine","Maria");
    Employee e6 = new Employee(6,15,"M","David","Feezor");
    Employee e7 = new Employee(7,68,"F","Melissa","Roy");
    Employee e8 = new Employee(8,79,"M","Alex","Gussin");
    Employee e9 = new Employee(9,15,"F","Neetu","Singh");
    Employee e10 = new Employee(10,45,"M","Naveen","Jain");
    List<Employee> employees = Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10);
    
    List<Employee> maped = employees.stream()
            .peek(e -> {
                e.setAge(e.getAge() + 1);
                e.setGender(e.getGender().equals("M")?"male":"female");
            }).collect(Collectors.toList());
    System.out.println(maped);
}

由于map的参数e就是返回值,所以可以用peek函数。peek函数是一种特殊的map函数,当函数没有返回值或者参数就是返回值的时候可以使用peek函数。

四、flatMap

map可以对管道流中的数据进行转换操作,但是如果管道中还有管道该如何处理?即:如何处理二维数组及二维集合类。实现一个简单的需求:将“hello”,“world”两个字符串组成的集合,元素的每一个字母打印出来。如果不用Stream我们怎么写?写2层for循环,第一层遍历字符串,并且将字符串拆分成char数组,第二层for循环遍历char数组。

List<String> Words = Arrays.asList("hello", "word");
words.stream()
        .map(w -> Arrays.stream(w.split("")))    //[[h,e,l,l,o],[w,o,r,l,d]]
        .forEach(System.out::println);

输出打印结果:

java.util.stream.ReferencePipeline$Head@3551a94
java.util.stream.ReferencePipeline$Head@531be3c5

用map方法是做不到的,这个需求用map方法无法实现。map只能针对一维数组进行操作,数组里面还有数组,管道里面还有管道,它是处理不了每一个元素的。

file

flatMap可以理解为将若干个子管道中的数据全都,平面展开到父管道中进行处理。

file

words.stream()
        .flatMap(w -> Arrays.stream(w.split(""))) // [h,e,l,l,o,w,o,r,l,d]
        .forEach(System.out::println);

输出打印结果:

h
e
l
l
o
w
o
r
d

以上就是Java基础理论Stream管道流Map操作示例的详细内容,更多关于java Stream管道流Map操作的资料请关注编程网其它相关文章!

--结束END--

本文标题: java基础理论Stream管道流Map操作示例

本文链接: https://www.lsjlt.com/news/142673.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java基础理论Stream管道流Map操作示例
    目录一、回顾Stream管道流map的基础用法二、处理非字符串类型集合元素三、再复杂一点:处理对象数据格式转换四、flatMap一、回顾Stream管道流map的基础用法 最简单的需...
    99+
    2022-11-13
  • java理论基础Stream管道流状态与并行操作
    目录一、回顾Stream管道流操作二、中间操作:有状态与无状态三、Limit与Skip管道数据截取四、Distinct元素去重五、Sorted排序六、串行、并行与顺序一、回顾Stre...
    99+
    2022-11-13
  • java理论基础Stream性能论证测试示例
    目录一、粉丝的反馈二、所有性能测试结论都是片面的三、动手测试Stream的性能3.1.环境3.2.测试用例与测试结论3.2.1.测试用例一3.2.2测试用例二3.2.3测试用例三四、...
    99+
    2022-11-13
  • java理论基础StreamAPI终端操作示例解析
    目录一、JavaStream管道数据处理操作二、ForEach和ForEachOrdered三、元素的收集collect3.1.收集为Set3.2.收集到List3.3.通用的收集方...
    99+
    2022-11-13
  • SpringBoot2 基础案例(12):基于转账案例,演示事务管理操作
    本文源码:GitHub·点这里 || GitEE·点这里一、事务管理简介事务基本概念一组业务操作ABCD,要么全部成功,要么全部不成功。特性:ACID原子性:整体一致性:完成隔离性:并发持久性:结果隔离问题脏读:一个事务读到另一个事务没有...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作