Java8新特性详解

我的网站:大家来逛一逛吧

Java8新特性

缓冲流

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

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

常见的缓冲流:(掌握)

​ 字节:

​ BufferedInputStream 输入流

​ BufferedOutputStream 输出流

字符:

​ BufferedReader 输入流

​ BUfferedWriter 输出流

随机访问文件(流)

可以指定访问位置

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

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

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

方法介绍

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);
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值