• java新特性流 stream01


    案例描述

    今天跟着黑马程序员的视频,完成“瑞吉外卖”项目的菜品信息管理模块的时候,遇到了一个比较陌生的写法

    用到了Java8的新特性 stream().map((item) -> {}).collect()

    
       
       
    1. List collect = records.stream().map((item) -> {
    2. DishDto dishDto = new DishDto();
    3. BeanUtils.copyProperties(item,dishDto);
    4. Long categoryId = item.getCategoryId();
    5. Category category = categoryMapper.selectById(categoryId);
    6. if (category != null) {
    7. String categoryName = category.getName();
    8. dishDto.setCategoryName(categoryName);
    9. }
    10. return dishDto;
    11. }).collect(Collectors.toList());
    • 1

    等价写法 

    
       
       
    1. List collect = new ArrayList<>();
    2. for ( int i = 0; i < records.size(); i++) {
    3. DishDto dishDto = new DishDto();
    4. BeanUtils.copyProperties(records.get(i),dishDto);
    5. Long categoryId = records.get(i).getCategoryId();
    6. Category category = categoryMapper.selectById(categoryId);
    7. if (category != null) {
    8. String categoryName = category.getName();
    9. dishDto.setCategoryName(categoryName);
    10. }
    11. collect.add(dishDto);
    12. }
    13. dishDtoPage.setRecords(collect);
    • 1

    其实,说白了,我们就是要干一件事,就是把records这个数组遍历一下,把 records 里面的属性字段赋值给dishDto, 并且添加一些“内容”。

    stream().map().collect() 

    抽离出本质

    
       
       
    1. mylist.stream().map((item)->{
    2. return item;
    3. }).collect(Collectors.toList());
    • 1

    steam()

    无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。

    为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。

    惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。

    可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。

    map()

    map 方法用于映射每个元素到对应的结果

    
       
       
    1. List numbers = Arrays.asList( 3, 2, 2, 3, 7, 3, 5);
    2. List squares = numbers.stream().map((i) -> {
    3. i = i*i;
    4. return i;
    5. }).distinct().collect(Collectors.toList());
    6. System.out.println(squares);
    7. // [9, 4, 49, 25]
    • 1

    简洁一点可以这样子:省略掉 ()-{}

    
       
       
    1. List numbers = Arrays.asList( 3, 2, 2, 3, 7, 3, 5);
    2. List squares = numbers.stream().map( i -> i*i).distinct()
    3. .collect(Collectors.toList());
    4. System.out.println(squares);
    • 1

    如果不理解,我们可以再看一个例子!

    filter()

    filter 方法用于通过设置的条件过滤出元素

    
       
       
    1. Liststrings = Arrays.asList( "abc", "", "bc", "efg", "abcd", "", "jkl");
    2. // 获取空字符串的数量
    3. long count = strings.stream().filter(string -> string.isEmpty()).count();
    4. // 2
    5. System.out.println(count);
    • 1

    更多的例子,在菜鸟里面都有,就不搬了...... 

    Java 8 Stream | 菜鸟教程 (runoob.com)icon-default.png?t=M85Bhttps://www.runoob.com/java/java8-streams.html
    .collect(Collectors.toList())

    将流中的所有元素导出到一个列表( List )

    
       
       
    1. Stream s = Stream.of( "Geeks", "for", "GeeksforGeeks", "Geeks Classes");
    2. List myList = s.collect(Collectors.toList());
    3. // [Geeks, for, GeeksforGeeks, Geeks Classes]
    4. System.out.println(myList);
    • 1
  • 相关阅读:
    机器学习笔记10---特征选择
    关于pbootcms中被挂马以后的处理
    Java中的this关键字
    [附源码]java毕业设计咖啡销售管理系统-
    目标检测论文解读复现之十六:基于改进YOLOv5的小目标检测算法
    【React】redux和React-redux
    面试官:小伙子你来介绍一下MyBatis
    Git常用命令及IDEA集成Git
    可以一键生成热点营销视频的工具,建议收藏
    《许犁庭与柔性世界》第十六章 五大势力
  • 原文地址:https://blog.csdn.net/gaoluan6052/article/details/133966687