Java8新特性

Java8新特性

缓冲流

在频繁的去操作一个文件的时候,文件过大需要用到,可以提升效率

读取:磁盘–>缓冲区–>用户内存

常见的缓冲流:(掌握)

​ 字节:

​ BufferedInputStream 输入流

​ BufferedOutputStream 输出流

字符:

​ BufferedReader 输入流

​ BUfferedWriter 输出流

随机访问文件(流)

可以指定访问位置

什么时候会用到随机访问?

  1. 网路下载资源断点续传

  2. 网络下载资源空间大小检查

方法介绍

length() 获取文件内容中字节数量

seek() 指定偏移位置

getFilePointer() 获取当前指针位置

函数接口

函数接口中有且只有一个抽象方法,可以有其他方法

使用一个注解@FunctionalIterface表示该接口为函数式接口,只能有一个抽象方法

Lamdba表达式(重要)

Lamdba表达式相当于匿名内部类的简写

语法结构:

函数接口 对象名 = (参数列表)->{功能语句};

1
2
3
InterfaceTest test = ()->{
System.out.println("这是Lamdba表达式Demo");
};

Lamdba书写时特点:

可以省略参数类型

当方法体中只有一句代码的时候{}可以省略,如果有返回值return一起省略

如果只有一个参数的时候,可以省略类型和()

如果只有一句代码,省略{}

如果引用了局部变量,那么局部变量默认由final修饰

Demo

MyInterFace接口

1
2
3
4
5
6
7
8
9
package com.ifueen.classtest.Lamdba;

@FunctionalInterface //定义函数接口
public interface MyInterFace {
void test(String name);
static void print(){
System.out.println("你们随便吃,今天的消费我来买单");
}
}

测试主类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.ifueen.classtest.Lamdba;

public class Test06 {
// 测试类
public static void main(String[] args) {
// TODO Auto-generated method stub
// 匿名内部类
MyInterFace f1 = new MyInterFace() {

@Override
public void test(String name) {
// TODO Auto-generated method stub
System.out.println(name + "去网吧玩游戏");
}
};
f1.test("牛某");
// Lamdba表达式
MyInterFace f2 = (String name) -> {
System.out.println("结果被坑了,"+name+"很丧气的走了出来");
};
f2.test("牛某");

MyInterFace f3 = name->System.out.println(name+"去吃螃蟹");
f3.test("牛某");

String name1 = "张某";
MyInterFace f4 = name->System.out.println(name1+"抢了他的螃蟹");
f4.test("");

MyInterFace f5 = name->{
System.out.println(name+"走了过去说");
MyInterFace.print();
};
f5.test("钱某");

}
}

Stream类(重要)

概念:

Stream(流)是一个来自数据源的元素队列并支持聚合操作

常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.ifueen.classtest.stream;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

public class StreamTest {
/*
* StreamDemo
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> asList = Arrays.asList(85,33,69,15,70,46); //拿到集合
//利用Stream遍历
asList.stream().forEach(System.out::print);
System.out.println("\n--------分隔---------");
//sorted排序
asList.stream().sorted().forEach(System.out::print);
System.out.println("\n--------分隔---------");
//j将每个数都+1然后再去重
asList.stream().map(i->i+1).distinct().sorted().forEach(System.out::print);
System.out.println("\n--------分隔---------");
//拿10个随机数
Random random = new Random();
random.ints().limit(10).forEach(System.out::print);
System.out.println("\n--------分隔---------");
//去掉空字符串
List<String> asList2 = Arrays.asList("你","到","","底","要","干","","嘛","");
String collect = asList2.stream().filter(str->!str.isEmpty()).collect(Collectors.joining(","));
System.out.println(collect);
//统计空字符串
long count = asList2.stream().filter(set->set.isEmpty()).count();
System.out.println(count);
}

}

Optional类

这个类可以理解成为了让代码格式更加简洁好看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.ifueen.classtest.optional;

import java.util.Optional;

public class OptionalTest {
/*
* OptionalDemo
* 设计一个方法 方法的参数是一个用户对象 对象有username和password两个属性
* 判断对象存不存在 如果存在返回 用户存在 如果不存在 返回unknown
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
UserBean userBean = new UserBean("李志", 35);
String check = check(userBean);
System.out.println(check);
}
public static String check(UserBean userBean) {
/*Optional<UserBean> optional = Optional.ofNullable(userBean);
if (userBean!=null) {
return "用户存在";
}
return "unknown";*/

return Optional.ofNullable(userBean).map(user->userBean.getName()+userBean.getAge()).orElse("known");

}

}

Bean类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.ifueen.classtest.optional;

public class UserBean {
String name;
int age;
public UserBean(String name, int age) {
super();
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;
}
}

时间日期类

Java8提供了新的时间日期类,下面列举几个常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.ifueen.classtest.date;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;

public class DateTest {
/*
* Java8时间日期
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
//LocalDate
LocalDate laDate = LocalDate.now(); //当前的年月号
System.out.println(laDate);
System.out.println(laDate.getDayOfWeek()); //星期几
LocalDateTime laDateTime = LocalDateTime.now(); //当前日期时间
System.out.println(laDateTime);
System.out.println(laDateTime.getDayOfMonth());
//LocalTime
LocalTime localTime = LocalTime.now(); //当前时间
System.out.println(localTime);
}

}
❤赏点钱让我买杯快乐水8❤