使用 Android Studio 在 Android 中使用 Java Stream Api(Java 8)

Gradle 設定:

build.gradle(模組:app)

 compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

     jackOptions {
            enabled true
        }

什麼是 Stream API?

Stream 是 Java 8 中引入的新抽象層。流是來自流源的一系列元素(物件,基本型別)。因此,stream 不是資料結構,它不儲存它使用的元素。它可以是有限的或無限大小,並允許輕鬆的程式碼並行性

好處:

  • 它有助於以宣告方式使用資料。我們可以使用像 Max,Min 等資料庫函式,而無需執行完整的迭代。
  • 它充分利用了多核架構,而不必擔心多執行緒程式碼。
  • 我們可以使用 Java Stream 建立一個資料操作管道,它可以按順序或並行執行。
  • 它為 group by,order by 等操作提供支援。
  • 它支援在函數語言程式設計風格中編寫程式碼。
  • 它提供資料的並行處理。

流如何工作:

正常方法(不使用流 Api):

 List<Integer> numbers = new ArrayList<>();
    numbers.addAll(Arrays.asList(1, 20, 3, 10, 20, 30, 4, 50, 80, 1, 2));//adding dummy data

    int i = 0;
    List<String> number_str = new ArrayList<>();
    for (Integer num : numbers) {
        if (i >= 5)//after 5 loop will stop
            break;

        if (num >= 10) // check number greater than or equal to 10
        {
            number_str.add(String.format("Number %d", num));//Typecast Integer to String then add to String List
            i++;//increment i count
        }
    }

    number_str.sort(Comparator.naturalOrder());//sort the list

在上面的程式碼中,我們建立了 Integer List 並新增了一些資料然後使用 for 迴圈迭代。在每次迴圈執行時,我們檢查迴圈計數(i >= 5)和 num >=10。最後排序字串列表

現在,讓我們使用 Java 的 8 Stream API 重寫程式碼:

  List<Integer> numbers = new ArrayList<>();
numbers.addAll(Arrays.asList(1, 20, 3, 10, 20, 30, 4, 50, 80, 1, 2));

List<String> number_str = numbers.stream()
        .filter(num -> num >= 10)//check num greater than 10
        .limit(5)//stop loop at 5
        .sorted()//sort the list
        .map(num -> String.format("Number %d", num))//typecast into String List
        .collect(Collectors.toList());