2022-8-08 第七小组 学习日记 (day32)Stream流

发布于:2023-01-25 ⋅ 阅读:(454) ⋅ 点赞:(0)

目录

JUnit 单元测试

JUnit单元测试的好处:

jar包

Test注解

测试方法注意事项:

JUnit断言

常用的方法:

JUnit注解

命名规范:

集合的面试题:

Stream流式编程

Stream有几个特性:

JDK8四大函数式接口

JDK8新增:

IO流------------对于文件的操作

工具类:File操作文件的类

1.文件的路径

2.File类的构造器

3.文件的操作

4.文件夹的操作

5.File类中判断的方法 

6.文件夹列表的操作

作业

自建CMD

总结 


JUnit 单元测试

JUnit是一个Java语言单元测试框架。

JUnit单元测试的好处:

  1. 可以书写一系列的测试方法,对项目的所有的接口或者方法进行单元测试。
  2. 启动单元测试后,是一个自动化的测试。
  3. 只需要查看最后的结果
  4. 每个单元测试的用例是相对独立的,而且是由JUnit启动(自动调用)
  5. 添加、删除、屏蔽测试方法

jar包

如果要引入第三方的插件,引入的都是“xxx . jar”的文件。

首先要把这个文件导入到我们的工程目录下

其次要添加到工程的依赖目录中

Test注解

是JUnit提供的一个单元测试注解。

如果工程没有导入JUnit的jar包,Test注解是不认识的

运行通过

运行不通过(报错)

测试方法注意事项:

  1. 不能有返回值
  2. 不能有参数列表(不能传参)
  3. 必须有@Test注解

添加JUnit后图标改变

JUnit断言

JUnit的所有的断言都包含Assert类中

这个类提供了很多有用的断言来编写测试用例,只有失败的断言才会被记录。

常用的方法:

  1. assertEquals:检查两个变量或等式是否相等
  2. assertTrue:检查条件是否为真
  3. assertFalse:检查条件是否为假
  4. assertNotNull:检查对象是否不为空
  5. assertNull:检查对象是否为空

断言不成功会抛异常,即时程序正常运行,但是结果不正确,也会以失败结束。

JUnit注解

  1. Test
  2. Before:在测试方法执行之前执行的方法
  3. After

 运行结果如下

命名规范:

单元测试类的命名:被测试类的类名 + Test(阿里规约)

测试方法的命名:test + 被测试方法的方法名


 

集合的面试题:

  1. Hashtable(线程安全的map)和ConcurrentHashMap(单线程)性能测试
  2. ArrayList和LinkedList性能测试:数组的查询快、插入慢;链表的查询慢、插入快

  1. 尾插数组快,链表慢
  2. 遍历数组快
  3. 头插链表快,数组慢
  4. 随机删除,如果要过滤的话建议用链表(LinkedList)

开发中以ArrayList为主


 

JDK8新增

Stream流式编程

容器对象功能的增强

我们可以将流看成流水线,这个流水线是处理数据的流水线

当我们使用一个流时,通常包括三个步骤:

  1. 获取一个数据源
  2. 执行操作获取想要的结果
  3. 每次操作,原有的流对象不改变,返回一个新的Stream对象

Stream有几个特性:

  1. Stream不存储数据,一般会输出结果
  2. Stream不会改变数据源,通常情况下会生成一个新的集合
  3. Stream具有延迟执行的特性,只有调用终端操作时,中间操作才会执行

顺序流:

并行流:

双冒号语法(方法引用)

anyMatch:任意匹配

 归约(reduce)

缩减,把一个流缩减成一个值,可以实现对集合的求和,求乘积,求最值

分组

分组将集合分为多个map,比如员工按性别分组、员工按薪资是否高于8000分组

筛选

映射:将一个流的元素按照一定的映射规则映射到另一个流中

排序:sorted

自然排序;compare接口

临时排序:compartor

peek操作:调试

在stream中调试,stream不支持debug

peek类似打断点,输出一下结果

其他操作:合并。去重。限制。跳过...

去重 distinct

skip 跳过几个数据

limit 限制使用几个数据

JDK8四大函数式接口

Consumer< T > :消费者 返回值void  accept( T  t )

Suptlier:供应商  T  get( )

Fuction:函数  R  apply( T  t)   讲一个数据转化成另一个数据

Predicate:断言接口  boolean  test( T  t)  判断返回值是boolean

Optional类是java8为了解决null问题

返回一个对象值为空的Optional对象

JDK8新增:

  1. 函数式接口
  2. 箭头函数 (lambda表达式) 不是java特有的
  3. Optional类
  4. 断言
  5. Stream流编程

 

IO流------------对于文件的操作

Input:把数据从物理内存加载到运行内存。(读文件)

Output:把数据从运行内存写到物理内存。(写文件)

java.io包下的类

计算机的输入和输出都是通过二进制完成

工具类:File操作文件的类

1.文件的路径

正斜杠:左斜杠、撇、/

反斜杠:右斜杠、捺、\

在Unix/Linux中,路径的分割采用正斜杠“/”。

在Windows中,路径的分割采用反斜杠“\”。

在Java中,\代表转义

Java中路径必须写两个“\\”,单个“\”代表转义,不代表路径

在File类中,定义了路径分隔符的常量,自动识别操作系统

2.File类的构造器

尽量不要拼接字符串

3.文件的操作

创建一个文件

creatNewFile创建文件,mkdir创建文件夹。

mkdir只能创建一级文件夹,创建多级文件夹用mkdirs

creatNewFile新建文件时不会覆盖已有的重名文件

绝对路径:以盘符开头

相对路径:没有指定的盘符开头

如果没有以盘符开头,系统默认以相对路径创建文件

4.文件夹的操作

5.File类中判断的方法 

6.文件夹列表的操作

    file类的删除是不走回收站


作业

自建CMD

输入指定的磁盘名:直接进入到磁盘

输入mkdir,创建目录

输入rd,删除文件

输入cnf:创建文件

输入dir遍历当前目录的文件

 public class  CMD{
        public static void main(String[] args) {
            while (true) {

                Scanner sc = new Scanner(System.in);
//                输入指定的磁盘名:直接进入到磁盘
                File nowDir = new File("C:\\Users\\ASUS\\Desktop\\aaa");
                System.out.print(nowDir + ">");

                String a  = sc.next();

                if (a.indexOf("-")<0){
                    System.out.println("输入有误");
                    continue;
                }

//                            截取            只取前面部分,+1是截取到-的位置,后面不取
                String b = a.substring(a.indexOf("-") + 1, a.length());
//                命令部分固有的
                String order = a.substring(0, a.indexOf("-"));
                //System.out.println("order="+order);
                //System.out.println("b="+b);
//                                    根目录,文件(目的目录)
                File file = new File(nowDir, b);
                switch (order){
//                    输入mkdir,创建目录
                    case"mkdir":
                        file.mkdirs();
                        break;
//                    输入rd,删除文件
                    case"rd":
                        file.delete();
                        break;
//                    输入cnf:创建文件
                    case"cnf":
                        try {
                            file.createNewFile();
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                        break;
//                    输入dir遍历当前目录的文件
                    case"dir":
                       String[] show= nowDir.list();
                        for (String s : show) {
                            System.out.println(s);
                        }
                        break;
                    default:
                        System.out.println("输错了宝");
                }

            }
        }
     }

新建后遍历:

C:\Users\ASUS\Desktop\aaa>mkdir-
C:\Users\ASUS\Desktop\aaa>cnf-稻香.mp4
C:\Users\ASUS\Desktop\aaa>cnf-6.txt
C:\Users\ASUS\Desktop\aaa>dir-
6.txt
稻香.mp4

                                                             删除后遍历:

C:\Users\ASUS\Desktop\aaa>rd-6.txt
C:\Users\ASUS\Desktop\aaa>dir-
稻香.mp4

总结 

        今天学的流和IO流的基础知识,感觉依然难以理解,晚上作业是自建CMD,本来对此一点不会还好同桌的帮助,我顺利的写出了CMD知识 。

        由开始的无从下手,到问同桌后掌握每一条代码的含义,然后到我自己动手写,并且成功运行,短短数行代码是我零迈开的脚步,以至于运行成功时我乐坏了,然后同桌继续给我拓展功能,增加错误引导功能使得代码更优化。

        第一次如此快的掌握思路并运行成功,还进行了优化,今天收获满满!

本文含有隐藏内容,请 开通VIP 后查看