美文网首页
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