目录

一、Java 8 Lambda 表达式

1.1 语法

1.2  Lambda 表达式实例(常见)

二、Java 8 Stream

2.1 什么是 Stream?

2.2生成流

2.3  forEach

2.4  map

2.5  filter

2.6  limit

2.7  sorted

2.8  并行(parallel)程序

2.9  Collectors

2.10  统计

2.11 其他还有

2.12  Stream 综合实例

三、Java 8 方法引用

3.1方法引用

3.2方法引用实例

四、Java 8 函数式接口

4.1 JDK 1.8 新增加的函数接口

4.2 函数式接口实例

五、Java 8 默认方法

5.1语法

5.2多个默认方法

5.3 静态默认方法

5.4 默认方法实例

六、Java 8 日期时间 API

6.1 本地化日期时间 API

6.2 使用时区的日期时间API

七、Java 8 Optional 类

7.1类声明

7.2 类方法

7.3  Optional 实例

八、Java 8 Nashorn JavaScript

8.1 jjs

8.2  jjs 交互式编程

8.3 传递参数

8.4  Java 中调用 JavaScript

8.5  JavaScript 中调用 Java

九、Java8 Base64

9.1 内嵌类

9.2 方法

9.3  Base64 实例

 

一、Java 8 Lambda 表达式

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用Lambda 表达式可以使代码变的更加简洁紧凑。

 

1.1 语法

lambda 表达式的语法格式如下:

(parameters) -> expression或(parameters) ->{statements; }

以下是lambda表达式的重要特征:

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

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

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

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

 

1.2  Lambda 表达式实例(常见)

(1)用lambda表达式实现Runnable

Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递),其可以代替实现 “接口” 中的抽象方法时的书写匿名内部类的繁琐代码。

Runnable run = new Runnable() {
    @Override
    public void run() {
        System.out.println("old run");
    }
};
run.run();

该代码可以使用lambda表达式简化为:

 Runnable run1 = () ->     System.out.println("lambda run");
 run1.run();

(2)使用lambda表达式对列表进行迭代

List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(n));
features.forEach(System.out::println);

(3)使用lambda表达式和函数式接口Predicate,适合用于过滤;

同时它提供类似于逻辑操作符AND和OR的方法,名字叫做and()、or()和xor(),用于将传入 filter() 方法的条件合并起来

List names = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
Predicate<String> startsWithJ = (n) -> n.startsWith("J");
Predicate<String> fourLetterLong = (n) -> n.length() == 4;
names.stream()
    .filter(startsWithJ.and(fourLetterLong))
    .forEach((n) -> System.out.print("nName, which starts with 'J' and four letter long is : " + n));

(4)使用lambda表达式的Map和Reduce

List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
costBeforeTax.stream().map((cost) -> cost + .12*cost).forEach(System.out::println);
double totalBill = costBeforeTax.stream().map((cost) -> cost + .12*cost).reduce((sum, cost) -> sum + cost).get();

(5)通过过滤创建一个String列表

// 创建一个字符串列表,每个字符串长度大于2
List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList());
// 将字符串换成大写并用逗号链接起来
String G7Countries = strList.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", "));
(更多相关用法详见stream用法)

(6)综合实例

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester tester = new Java8Tester();
        // 类型声明
        MathOperation addition = (int a, int b) -> a + b;
        // 不用类型声明
        MathOperation subtraction = (a, b) -> a - b;
        // 大括号中的返回语句
        MathOperation multiplication = (int a, int b) -> {
            return a * b;
        };
        // 没有大括号及返回语句
        MathOperation division = (int a, int b) -> a / b;
        System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
        System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
        System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
        System.out.println("10 / 5 = " + tester.operate(10, 5, division));
        // 不用括号
        GreetingService greetService1 = message ->
                System.out.println("Hello " + message);
        // 用括号
        GreetingService greetService2 = (message) ->
                System.out.println("Hello " + message);
        greetService1.sayMessage("Runoob");
        greetService2.sayMessage("Google");
    }
    interface MathOperation {
        int operation(int a, int b);
    }
    interface GreetingService {
        void sayMessage(String message);
    }
    private int operate(int a, int b, MathOperation mathOperation) {
        return mathOperation.operation(a, b);
    }
}
java 8新内容整理
10+5=15
10-5=5
10 x 5=50
10/5=2
HelloRunoob
HelloGoogle
输出结果

相关文章:

  • 2021-10-03
  • 2021-10-08
  • 2021-12-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-26
猜你喜欢
  • 2022-02-14
  • 2021-10-05
  • 2022-12-23
  • 2021-12-05
  • 2021-05-27
  • 2021-07-04
  • 2021-09-27
相关资源
相似解决方案