首页 > 编程语言 >java函数式编程stream流操作lambda表达式使用方法引用用法等练习

java函数式编程stream流操作lambda表达式使用方法引用用法等练习

时间:2023-05-25 10:57:06浏览次数:52  
标签:java stream List add Books new public lambda

java函数式编程stream流操作lambda表达式使用方法引用用法等练习

 

    @Test
    void test01() {
        System.out.println("111");
        List<Author> authors = getAuthor();
        //stream流打对象中一个字段
        authors.stream().distinct().forEach(author -> System.out.println(author.name));

        //flatMap把一个stream流转成另一个stream流,然后通过map转成对象,最终在转成list
        //把书名放到一个list中
        List<String> name_list = authors.stream().flatMap(author -> author.books.stream()).map(books -> books.name).collect(Collectors.toList());

        System.out.println(name_list);
    }


    @Test
    public void test02(){
        List<Author> authors = getAuthor();

        //引用类的实例方法 System.out::print
        //打印出所有书名
        authors.stream().flatMap(author -> author.books.stream()).map(books -> books.name).forEach(System.out::print);
    }



    public static  List<Author> getAuthor(){
        List<Books> books1 = new ArrayList<Books>() {
            {
                add(new Books(1,"书1","小说,科学",10,"简介一11"));
                add(new Books(2,"书2","计算机,理财",20,"简介一20"));
                add(new Books(3,"书3","屋里,科学",30,"简介一30"));
                add(new Books(4,"书4","化学,经济",40,"简介一40"));
                add(new Books(5,"书5","小说,科学",50,"简介一50"));
            }
        };

        List<Books> books2 = new ArrayList<Books>() {
            {
                add(new Books(6,"书6","小说,科学",60,"简介一61"));
                add(new Books(7,"书7","计算机,理财",70,"简介一70"));
                add(new Books(8,"书8","屋里,科学",80,"简介一80"));
            }
        };

        List<Books> books3 = new ArrayList<Books>() {
            {
                add(new Books(9,"书9","小说,科学",90,"简介一90"));
                add(new Books(10,"书10","计算机,理财",100,"简介一100"));
            }
        };

        List<Author> authors = new ArrayList<Author>(){
            {
                add(new Author(1,"作者1",11,books1));
                add(new Author(2,"作者2",22,books2));
                add(new Author(3,"作者3",33,books3));
            }
        };
        return authors;

    }



    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Author {
        public Integer id;
        public String name;
        public Integer age;
        public List<Books> books;
    }


    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Books {
        public Integer id;
        public String name;
        public String category;
        public Integer socre;
        public String intro;
    }

 

 

 

 

 

 

 

 

 

 

 

参: https://www.bilibili.com/video/BV1Gh41187uR

 

标签:java,stream,List,add,Books,new,public,lambda
From: https://www.cnblogs.com/fps2tao/p/17430504.html

相关文章

  • 力扣239(Java)- 滑动窗口最大值(困难)
    题目:给你一个整数数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例1:输入:nums=[1,3,-1,-3,5,3,6,7],k=3输出:[3,3,5,5,6,7]解释:滑动窗口的位......
  • java基本原理及三大框架原理和数据库基本知识点总结
    这个也是超详细的,自己遇到的问题,然后总结下来的,有查的和自己理解的,很多点,对于做javaweb开发的同学很有帮助。笔记如下:1、面向对象的特征有哪些方面1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选......
  • java 通过String关键词 和 String对象创建字符串 耗时对比
    importjava.util.ArrayList;importjava.util.Vector;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){longstartTime=System.currentTimeMillis();for(inti=0;i<5000000;i++){Strings1="he......
  • 三路快排Java版(带思路分析)
    快速排序这里我们直接开始讲相对的最优解带随机数的三路快排好了,中间还有很多版本的快排,但是都有一些问题导致在某种极端情况下造成耗费时间极多。基础快排:在序列本身有序的情况下复杂度为O(n²)带随机数的快排:在序列本身有序的情况下复杂度为O(nlogn),但是在序列全部元素相同......
  • Cannot run program “G:\Java\bin\java.exe“ (in directory “C:\compile-serve
    今夜拾起两年前早已遗忘的java踌躇满志打开idea发现早已物是人非他报错了,然鹅并没有解决,解决方法我把Structure里多余的jdk删掉,只剩下jdk1.8,如图,就解决了......
  • java易错题锦集系列五
    接口中不能有构造方法,抽象类中可以有。抽象类中构造方法作用:初始化抽象类的成员;为继承它的子类使用定义在同一个包(package)内的类是可以不经过import而直接相互使用final修饰的方法可以被重载但不能被重写从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行......
  • java易错题锦集四
    effectivejava不要再构造方法中启动任何线程g=newGameServer();g.start();构造器无返回值,但是不能void修饰字符串String是包装类型吗?答案:不是对应的基本类型和包装类如下表:基本数据类型包装类byteBytebooleanBooleanshortShortcharCharacterintIntegerlongLon......
  • java易错题锦集二
    源码补码inti=5;intj=10;System.out.println(i+~j);有个公式,-n=~n+1另一种解题思路~代表对n按位取反10的源码是:0000000000000000000000001010所以对10按位取反就是1111111111111111111111110101由于计算机中-1表示为1111111111111111111111111111显然......
  • MQTT入门DEMO(Java语言)
    目录快速开始准备下载及安装第一次安装EMQX第一次运行EMQX客户端代码快速开始准备MQTT简介EMQX简介下载及安装第一次安装EMQX版本选择EMQX支持多种操作系统,请选择合适您的版本下载。下载地址:https://www.emqx.io/cn/downloads#broker在MicrosoftWindows下安装目前EMQX......
  • java输出乘法口诀
    importjava.util.StringTokenizer;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){for(inti=1;i<9;i++){for(intj=1;j<=i;j++){System.out.print(j+"*"+i+"=&q......