java8的 概述以及新特性

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java8的 概述以及新特性相关的知识,希望对你有一定的参考价值。

一 java8的新特性

1.代码简洁

2.支持stream的API

3.支持lambda表达式

4.更利于并行计算。

二 java8功能的引出

2.1 需求描述

在一个集合中找出年龄大于50,且分数大于80分的学生。

List<Student> studentsList=new ArrayList<>();
studentsList.add(new Student("zhangsan",23,56));
studentsList.add(new Student("lisi",33,86));
studentsList.add(new Student("wangwu",56,90));

2.2 方式1:普通遍历获取

        //普通方式1:获取学生年龄大于50的学生
        List<Student> firstList=getAgeAbove50( studentsList);
        for(Student s:firstList)
            System.out.println("s:"+s);
        
        System.out.println("===============");
        List<Student> secondList=getScoeAboe80( studentsList);
        for(Student s2:secondList)
            System.out.println("s:"+s2);
        
        System.out.println("===============================");

结果为:

s:Studentname='wangwu', age=56, score=90.0
===============
s:Studentname='lisi', age=33, score=86.0
s:Studentname='wangwu', age=56, score=90.0
===============================

2.2 方式2:通过接口的策略模式

1.定义一个接口

public interface MyStudent<T>
    public boolean  checkout(T t);

2.过滤实现类

1.过滤年龄

public class MyStudentAgeFilter implements MyStudent<Student> 
    @Override
    public boolean checkout(Student student) 
        boolean flag=false;
        if(student.getAge()>50)
            flag=true;
        
        return flag;
    

2.过滤分数

public class MyStudentScoreFilter  implements MyStudent<Student>
    @Override
    public boolean checkout(Student student) 
        boolean flag=false;
        if(student.getScore()>80)
            flag=true;
        
        return flag;
    

3.测试

  //方式2:接口方式,获取学生年龄大于50的学生
        List<Student> thirdList = getFilterData( studentsList, new MyStudentAgeFilter());
        for(Student student2:thirdList)
            System.out.println("st2:"+student2);
        
        System.out.println("方式2:接口方式=============");
        List<Student> fourthList = getFilterData( studentsList, new MyStudentScoreFilter());
        for(Student student3:fourthList )
            System.out.println("st3:"+student3);
        
        System.out.println("**************");

结果:

st2:Studentname='wangwu', age=56, score=90.0
方式2:接口方式=============
st3:Studentname='lisi', age=33, score=86.0
st3:Studentname='wangwu', age=56, score=90.0

2.3  方式3:匿名内部类

 //方式3:匿名内部类,获取学生年龄大于50的学生
List<Student> fiveList = getFilterData(studentsList, new MyStudent<Student>() 
    @Override
    public boolean checkout(Student student) 
        if(student.getAge()>50)
            return true;
        
        return false;
    
);
for(Student student4:fiveList )
    System.out.println("st4:"+student4);

 结果:

st4:Studentname='wangwu', age=56, score=90.0

2.4 方式4:lambda表达式

//方式4: lambada表达式
List<Student> list = getFilterData(studentsList, (e) -> e.getAge() >50);
list.forEach(System.out::println);
System.out.println("------------------------------------------");

结果为:

Studentname='wangwu', age=56, score=90.0

2.5  方式5:stream api表达式

//方式5: streamApi
studentsList.stream().filter((e) -> e.getAge() > 50).forEach(System.out::println);
System.out.println("----------------------------------------------");

结果为:

Studentname='wangwu', age=56, score=90.0

以上是关于java8的 概述以及新特性的主要内容,如果未能解决你的问题,请参考以下文章

java8新特性-Stream概述

java 8 新特性

Java8新特性

Java8新特性

Java8 新特性----函数式接口,以及和Lambda表达式的关系

Java8新特性:Lambda表达式函数式接口以及方法引用