1. 程式人生 > 實用技巧 >Java 8新特性

Java 8新特性

(一)Lambda表示式(匿名函式)

(二)Stream多執行緒並行資料處理

新特性:

1、介面的預設方法只需要使用default關鍵字即可,這個特徵又叫擴充套件方法

2、Lambda表示式

3、Functional介面函式式介面是指僅僅只包含一個抽象方法的介面,每個該型別的Lambda表示式都會匹配到這個抽象方法。只需要給介面新增 @FunctioalInterface

4、使用 ::雙冒號關鍵字來傳遞方法(靜態方法和非靜態方法)

5、predicate介面和Lambda表示式

6、Function介面

  6.1 Function有一個引數並且返回一個結果,並附帶了一些可以和其他函式組合的預設方法

  6.2compose 方法表示在某個方法之前執行

  6.3 andThen 方法表示在某個方法之後執行

  *compose 和 andThen 方法呼叫之後都會把物件自己本身返回,這可以方便鏈式程式設計

7、Supplier 介面,返回一個任意範型的值,和 Function 介面不同的是該介面沒有任何引數

8、Consumer 介面,接收一個任意範型的值,和 Function 介面不同的是該介面沒有任何值

9、Optional 類

  • Optional 不是介面而是一個類,這是個用來防止NullPointerException異常的輔助型別
  • Optional 被定義為一個簡單的容器,其值可能是 null 或者不是 null。
  • 在 Java8 之前一般某個函式應該返回非空物件但是偶爾卻可能返回了 null,而在 Java8 中,不推薦你返回 null 而是返回 Optional。
  • 這是一個可以為 null 的容器物件。
  • 如果值存在則isPresent()方法會返回 true,呼叫get()方法會返回該物件。

小試牛刀

  

package com.zjq.jdk8.feature.lambda;
    
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Lambda 基本用法
 * @author zjq
 * @version 1.0.0
 * @date 2020/11/20 10:42
 */
public class BaseLambda {
    public static void main(String[] args) {
        testForeach();
        testStreamDuplicates();
    }

    /**
     * Lambda 遍歷
     */
    public static void testForeach() {
        // 定義一個數組
        String[] array = {
                "尼爾機械紀元",
                "關於我轉生成為史萊姆這件事",
                "實力至上主義教師",
                "地獄少女"
        };

        // 轉換成集合
        List<String> acgs = Arrays.asList(array);

        // 傳統的遍歷方式
        System.out.println("傳統的遍歷方式:");
        for (String acg : acgs) {
            System.out.println(acg);
        }
        System.out.println();

        // 使用 Lambda 表示式以及函式操作(functional operation)
        System.out.println("Lambda 表示式以及函式操作:");
        acgs.forEach((acg) -> System.out.println(acg));
        System.out.println();

        // 在 Java 8 中使用雙冒號操作符(double colon operator)
        System.out.println("使用雙冒號操作符:");
        acgs.forEach(System.out::println);
        System.out.println();
    }

    /**
     * Stream 去重複
     * String 和 Integer 可以使用該方法去重
     */
    public static void testStreamDuplicates() {
        System.out.println("Stream 去重複:");

        // 定義一個數組
        String[] array = {
                "尼爾機械紀元",
                "尼爾機械紀元",
                "關於我轉生成為史萊姆這件事",
                "關於我轉生成為史萊姆這件事",
                "實力至上主義教師",
                "實力至上主義教師",
                "地獄少女",
                "地獄少女"
        };

        // 轉換成集合
        List<String> acgs = Arrays.asList(array);

        // Stream 去重複
        acgs = acgs.stream().distinct().collect(Collectors.toList());

        // 列印
        acgs.forEach(System.out::println);
    }
}

轉自:有夢想的鹹魚