我的网站:大家来逛一逛吧
Java8新特性
缓冲流
在频繁的去操作一个文件的时候,文件过大需要用到,可以提升效率
读取:磁盘–>缓冲区–>用户内存
常见的缓冲流:(掌握)
字节:
BufferedInputStream 输入流
BufferedOutputStream 输出流
字符:
BufferedReader 输入流
BUfferedWriter 输出流
随机访问文件(流)
可以指定访问位置
什么时候会用到随机访问?
-
网路下载资源断点续传
-
网络下载资源空间大小检查
方法介绍
length() 获取文件内容中字节数量
seek() 指定偏移位置
getFilePointer() 获取当前指针位置
函数接口
函数接口中有且只有一个抽象方法,可以有其他方法
使用一个注解@FunctionalIterface表示该接口为函数式接口,只能有一个抽象方法
Lamdba表达式(重要)
Lamdba表达式相当于匿名内部类的简写
语法结构:
函数接口 对象名 = (参数列表)->{功能语句};
InterfaceTest test = ()->{
System.out.println("这是Lamdba表达式Demo");
};
Lamdba书写时特点:
可以省略参数类型
当方法体中只有一句代码的时候{}可以省略,如果有返回值return一起省略
如果只有一个参数的时候,可以省略类型和()
如果只有一句代码,省略{}
如果引用了局部变量,那么局部变量默认由final修饰
Demo
MyInterFace接口
package com.ifueen.classtest.Lamdba;
@FunctionalInterface //定义函数接口
public interface MyInterFace {
void test(String name);
static void print(){
System.out.println("你们随便吃,今天的消费我来买单");
}
}
测试主类
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(流)是一个来自数据源的元素队列并支持聚合操作
常用方法
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类
这个类可以理解成为了让代码格式更加简洁好看
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类:
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提供了新的时间日期类,下面列举几个常用方法
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);
}
}