Java8新特性

一、Lambda案例

案例1
public class TestLambda1 {
    
    public static void main(String[] args) {

        new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类实现Runnable接口");
            }
        }.run();

        int i = 1;
        Runnable r = () -> {
            System.out.println("用lambda实现Runnable接口");
            System.out.println("i=" + i);
        };
        r.run();
    }
}
案例2
public class TestLambda2 {

    public static void main(String[] args) {

        new Action() {
            @Override
            public void execute(String content) {
                System.out.println(content);
            }
        }.execute("jdk1.8之前的匿名内部类实现方式,执行登录操作");

        Action login = (String content) -> {
            System.out.println(content);
        };
        login.execute("jdk1.8的lambda语法实现登录操作");
    }
    
    static interface Action {
        void execute(String content);
    }

}

二、Stream接口

Stream介绍
  1. Stream在Java8中被定义为泛型接口

  2. Stream接口代表数据流

  3. Stream不是一个数据结构,不直接存储数据

  4. Stream通过管道操作数据

  5. 创建Stream接口实现类对象

    //stream():创建一个Stream接口实现类的对象。
    List list = new ArrayList<>();
    Stream stream = list.stream ();
    
管道介绍
  1. 管道:代表一个操作序列
  2. 管道包含以下组件:
    1. 数据集:可能是集合、数字等
    2. 零个或多个中间业务,如:过滤器
    3. 一个终端操作,如:forEach
过滤器介绍
  1. 过滤器:用给定的条件在源数据基础上过滤出新的数据,并返回一个Stream对象

  2. 过滤器包含匹配的谓词(谓词,用来描述或判定客体性质、特征或者客体之间关系的词项)

    //判断p对象是否为男性的lambda表达式
    List list = new ArrayList<>();
    Stream stream = list.stream();
    stream = stream.filter(p -> getGender() == '男');
    
案例
//创建一个元素为Person类的集合:list
List list = new ArrayList<>();
//使用Stream和forEach显示该集合所有的元素。
Stream stream = list.stream();
stream.forEach(p -> System.out.println(p.toString()));
//使用Stream过滤器filter过滤出性别为女性的人群
list.stream()
    .filter(p -> p.getGender() == SexEnum.FEMALE)
    .forEach(p -> System.out.println(p.toString()));

三、DoubleStream接口

介绍
  1. DoubleStream接口表示元素类型的double的数据源
  2. DoubleStream接口的常用方法:
    1. stream().max().getAsDouble():获取流中数据集的最大值
    2. stream().min().getAsDouble():获取流中数据集的最小值
    3. stream().average().getAsDouble():获取流中数据集的平均值
案例
//创建一个元素为Person类的集合:list
List list = new ArrayList<>();
//统计people集合中姓名中包含"菲"字的平均身高
double avgHeight = list.stream()
    .filter(p -> p.getName().indexOf("菲") >= 0)
    .mapToDouble(p -> p.getHeight())
    .average()
    .getAsDouble();
System.out.println("包含菲字的所有人的平均身高:" + avgHeight + "米");

四、LocalDate类

介绍

LocalDate类使用ISO日历表示年、月、日

常用方法
  1. LocalDate.now():获取系统当前日期
  2. LocalDate.of(int year, int month, int dayOfMonth):按指定日期创建LocalDate对象
  3. getYear():返回日期中的年份
  4. getMonthValue():返回日期中的月份
  5. getDayOfMonth():返回月份中的日
案例
public class TestLocalDate {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        System.out.println(date.getYear());
        System.out.println(date.getMonthValue());
        System.out.println(date.getDayOfMonth());
        System.out.println(date.toString());
    }
}

五、LocalTime类

介绍

LocalTime类用于表示一天中的时间

常用方法
  1. LocalTime.now():获取系统当前时间
  2. LocalTime.of(int hour, int minute, int second):按指定时间创建LocalTime对象
  3. getHour():返回小时
  4. getMinute():返回分钟
  5. getSecond():返回秒
案例
public class TestLocalTime {
    public static void main(String[] args) {
        LocalTime time = LocalTime.now();
        System.out.println(time.getHour());
        System.out.println(time.getMinute());
        System.out.println(time.getSecond());
        System.out.println(time.toString());
    }
}

六、LocalDateTime类

介绍

LocalDateTime类用于表示日期和时间

常用方法
  1. LocalDateTime.now():获取系统当前时间
  2. LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second):按指定日期和时间创建LocalDateTime对象
  3. getYear():返回日期中的年份
  4. getMonthValue():返回日期中的月份
  5. getDayOfMonth():返回月份中的日
  6. getHour():返回小时
  7. getMinute():返回分钟
  8. getSecond():返回秒
案例
public class TestLocalDateTime {
    public static void main(String[] args) {
        LocalDateTime dateTime = LocalDateTime.now();
        System.out.println(dateTime.getYear());
        System.out.println(dateTime.getMonthValue());
        System.out.println(dateTime.getDayOfMonth());
        System.out.println(dateTime.getHour());
        System.out.println(dateTime.getMinute());
        System.out.println(dateTime.getSecond());
        System.out.println(dateTime.toString());
    }
}

七、DateTimeFormatter类

介绍

DateTimeFormatter类用于将字符串解析为日期

常用方法
  1. static ofPattern(String pattern):按pattern字符串指定的格式创建DateTimeFormatter对象
  2. LocalDateTime.parse(strDate, formatter)
案例
//将字符串“2014-04-01 13:24:01”格式化为一个LocalDateTime类的对象,并显示年、月、日、时、分和秒
public class TestDateTimeFormatter {
    public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime date = LocalDateTime.parse("2014-04-01 13:24:01", formatter);
        System.out.println(date.toString());
    }
}

八、ZonedDateTime类

介绍

ZonedDateTime处理日期和时间与相应的时区

常用方法
  1. ZonedDateTime.now():获取系统当前日期和时间
  2. String format(DateTimeFormatter formatter):按指定模板将日期对象格式化为一个字符串
案例
//将当期日期格式化为字符串并显示年、月、日、时、分和秒
public class TestZonedDateTime {
    public static void main(String[] args) {
        ZonedDateTime date = ZonedDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy:HH:mm:ss");
        String strDate = date.format(formatter);
        System.out.println(strDate);
    }
}

你可能感兴趣的:(Java8新特性)