美文网首页
Java8 新特性

Java8 新特性

作者: 小石头呢 | 来源:发表于2019-08-16 23:28 被阅读0次

    一.Lambda 表达式

    Android Studio中可能会出现无法使用,提示说语言等级是7无法使用,Alt+Insert调用解决方法,重新编译。

    1.概念

    Lambda 表达式,也可称为闭包,允许把函数作为一个方法的参数。

    2.重要特征

    • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

    • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

    • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

    • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

    3.Lambda表达式实例

    // 1. 不需要参数,返回值为 5  
    () -> 5  
      
    // 2. 接收一个参数(数字类型),返回其2倍的值  
    x -> 2 * x  
      
    // 3. 接受2个参数(数字),并返回他们的差值  
    (x, y) -> x – y  
      
    // 4. 接收2个int型整数,返回他们的和  
    (int x, int y) -> x + y  
      
    // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
    (String s) -> System.out.print(s)
    

    4.注意

    • 不能在 Lambda 内部修改定义在域外的局部变量

    • 只能引用标记了 final 的外层局部变量

    • Lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)

    • 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。

    5.Lambda运用实例

    • 移除集合里面对象的值大于2的
    Collection<Integer> collectionTemp1 = new ArrayList();
    collectionTemp1.add(1);
    collectionTemp1.add(2);
    collectionTemp1.add(3);
    
    collectionTemp1.removeIf(obj -> obj > 2);
    System.out.println(collectionTemp1);
    
    输出:[1, 2]
    
    • 输出集合里面Person对象中年龄大于30和名字带有张的人数
    public class Person {
        String name;
        int age;
    
        public Person(String name,int age){
            this.name = name;
            this.age = age;
        }
    }
    
    import java.util.ArrayList;
    
    public class Test {
        public static void main(String[] args){
    
            ArrayList<Person> persons = new ArrayList<>();
    
            String[] names = {"张明","张杰","李明浩","李浩天","李隆基","李世明"};
    
            for (int i = 0; i < names.length; i++) {
                Person person = new Person(names[i],i+30);
                persons.add(person);
            }
    
            ShowTheResult.show(persons,lists -> {
    
                int ageCount = 0;
                int nameCount = 0;
    
                for (Person people : lists) {
    
                    if (people.age > 30){
                        ageCount++;
                    }
    
                    if (people.name.contains("张")){
                        nameCount++;
                    }
                }
    
                System.out.println("名字里面含有张的人数是:"+nameCount+" "+"年龄超过30的人数是:"+ageCount);
            });
    
        }
    }
    
    interface Show{
        void showTheCount(ArrayList<Person> T);
    }
    
    class ShowTheResult{
        public static void show(ArrayList<Person> T,Show s){
            s.showTheCount(T);
        }
    }
    
    • 一般使用都是一个类中的某个方法中需要一个函数做参数,这个函数实现了某个接口,根据接口就可以写出对应的实现。

    二.方法引用

    三.函数式接口

    四.默认方法

    五.Stream

    六.Optional 类

    七.Nashorn, JavaScript 引擎

    八.新的日期时间 API

    Base64

    相关文章

      网友评论

          本文标题:Java8 新特性

          本文链接:https://www.haomeiwen.com/subject/zdzqsctx.html