Java8新特性详解

雨点打透心脏的1/2处 2023-10-18 22:53 235阅读 0赞

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

Java8新特性

aHR0cHM6Ly9zMi5heDF4LmNvbS8yMDE5LzA4LzA0L2U2ejhXRi5wbmc

缓冲流

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

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

常见的缓冲流:(掌握)

字节:

BufferedInputStream 输入流

BufferedOutputStream 输出流

字符:

BufferedReader 输入流

BUfferedWriter 输出流

随机访问文件(流)

可以指定访问位置

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

  1. 网路下载资源断点续传
  2. 网络下载资源空间大小检查

方法介绍

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

seek() 指定偏移位置

getFilePointer() 获取当前指针位置

函数接口

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

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

Lamdba表达式(重要)

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

语法结构:

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

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

Lamdba书写时特点:

可以省略参数类型

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

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

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

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

Demo

MyInterFace接口

  1. package com.ifueen.classtest.Lamdba;
  2. @FunctionalInterface //定义函数接口
  3. public interface MyInterFace {
  4. void test(String name);
  5. static void print(){
  6. System.out.println("你们随便吃,今天的消费我来买单");
  7. }
  8. }

测试主类

  1. package com.ifueen.classtest.Lamdba;
  2. public class Test06 {
  3. // 测试类
  4. public static void main(String[] args) {
  5. // TODO Auto-generated method stub
  6. // 匿名内部类
  7. MyInterFace f1 = new MyInterFace() {
  8. @Override
  9. public void test(String name) {
  10. // TODO Auto-generated method stub
  11. System.out.println(name + "去网吧玩游戏");
  12. }
  13. };
  14. f1.test("牛某");
  15. // Lamdba表达式
  16. MyInterFace f2 = (String name) -> {
  17. System.out.println("结果被坑了,"+name+"很丧气的走了出来");
  18. };
  19. f2.test("牛某");
  20. MyInterFace f3 = name->System.out.println(name+"去吃螃蟹");
  21. f3.test("牛某");
  22. String name1 = "张某";
  23. MyInterFace f4 = name->System.out.println(name1+"抢了他的螃蟹");
  24. f4.test("");
  25. MyInterFace f5 = name->{
  26. System.out.println(name+"走了过去说");
  27. MyInterFace.print();
  28. };
  29. f5.test("钱某");
  30. }
  31. }

Stream类(重要)

概念:

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

常用方法

  1. package com.ifueen.classtest.stream;
  2. import java.util.Arrays;
  3. import java.util.Collections;
  4. import java.util.List;
  5. import java.util.Random;
  6. import java.util.stream.Collectors;
  7. public class StreamTest {
  8. /*
  9. * StreamDemo
  10. * */
  11. public static void main(String[] args) {
  12. // TODO Auto-generated method stub
  13. List<Integer> asList = Arrays.asList(85,33,69,15,70,46); //拿到集合
  14. //利用Stream遍历
  15. asList.stream().forEach(System.out::print);
  16. System.out.println("\n--------分隔---------");
  17. //sorted排序
  18. asList.stream().sorted().forEach(System.out::print);
  19. System.out.println("\n--------分隔---------");
  20. //j将每个数都+1然后再去重
  21. asList.stream().map(i->i+1).distinct().sorted().forEach(System.out::print);
  22. System.out.println("\n--------分隔---------");
  23. //拿10个随机数
  24. Random random = new Random();
  25. random.ints().limit(10).forEach(System.out::print);
  26. System.out.println("\n--------分隔---------");
  27. //去掉空字符串
  28. List<String> asList2 = Arrays.asList("你","到","","底","要","干","","嘛","");
  29. String collect = asList2.stream().filter(str->!str.isEmpty()).collect(Collectors.joining(","));
  30. System.out.println(collect);
  31. //统计空字符串
  32. long count = asList2.stream().filter(set->set.isEmpty()).count();
  33. System.out.println(count);
  34. }
  35. }

Optional类

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

  1. package com.ifueen.classtest.optional;
  2. import java.util.Optional;
  3. public class OptionalTest {
  4. /*
  5. * OptionalDemo
  6. * 设计一个方法 方法的参数是一个用户对象 对象有username和password两个属性
  7. * 判断对象存不存在 如果存在返回 用户存在 如果不存在 返回unknown
  8. * */
  9. public static void main(String[] args) {
  10. // TODO Auto-generated method stub
  11. UserBean userBean = new UserBean("李志", 35);
  12. String check = check(userBean);
  13. System.out.println(check);
  14. }
  15. public static String check(UserBean userBean) {
  16. /*Optional<UserBean> optional = Optional.ofNullable(userBean);
  17. if (userBean!=null) {
  18. return "用户存在";
  19. }
  20. return "unknown";*/
  21. return Optional.ofNullable(userBean).map(user->userBean.getName()+userBean.getAge()).orElse("known");
  22. }
  23. }

Bean类:

  1. package com.ifueen.classtest.optional;
  2. public class UserBean {
  3. String name;
  4. int age;
  5. public UserBean(String name, int age) {
  6. super();
  7. this.name = name;
  8. this.age = age;
  9. }
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. public int getAge() {
  17. return age;
  18. }
  19. public void setAge(int age) {
  20. this.age = age;
  21. }
  22. }

时间日期类

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

  1. package com.ifueen.classtest.date;
  2. import java.time.LocalDate;
  3. import java.time.LocalDateTime;
  4. import java.time.LocalTime;
  5. import java.time.ZoneId;
  6. public class DateTest {
  7. /*
  8. * Java8时间日期
  9. * */
  10. public static void main(String[] args) {
  11. // TODO Auto-generated method stub
  12. //LocalDate
  13. LocalDate laDate = LocalDate.now(); //当前的年月号
  14. System.out.println(laDate);
  15. System.out.println(laDate.getDayOfWeek()); //星期几
  16. LocalDateTime laDateTime = LocalDateTime.now(); //当前日期时间
  17. System.out.println(laDateTime);
  18. System.out.println(laDateTime.getDayOfMonth());
  19. //LocalTime
  20. LocalTime localTime = LocalTime.now(); //当前时间
  21. System.out.println(localTime);
  22. }
  23. }

发表评论

表情:
评论列表 (有 0 条评论,235人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java8特性详解

    > 陈老老老板 > > 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油。 > 本文是介绍Jav

    相关 java8特性详解

    java8已经出了很久,项目中也在使用。其最重要的特性就是Lambda表达式和函数式编程,这让我们的代码可以大大简化,更加优雅。 读者通过这篇文章,可以入门java8,并且