成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 開發者必備:Stream API 的核心用法與實戰技巧

開發 后端
Stream API 提供了一種函數式編程風格的操作集合的方法,使代碼更簡潔、可讀性更高。本文將詳細介紹 Java Stream API 的基本用法和一些實踐技巧。

Java 8 引入了 Stream API,使得我們可以更加簡潔、高效地處理集合。Stream API 提供了一種函數式編程風格的操作集合的方法,使代碼更簡潔、可讀性更高。本文將詳細介紹 Java Stream API 的基本用法和一些實踐技巧。

什么是 Stream API

Stream 是 Java 8 引入的一個新的抽象,它代表一個支持數據處理操作的序列。Stream 以函數式編程的方式處理數據,可以執行過濾、映射、規約等操作。與傳統的集合不同,Stream 不存儲數據,而是按需計算。

Stream 的創建方式

可以通過多種方式創建 Stream,常見的方法如下:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StreamCreation {
    public static void main(String[] args) {
        // 從集合創建
        List<String> list = Arrays.asList("a", "b", "c");
        Stream<String> streamFromList = list.stream();

        // 從數組創建
        String[] array = {"x", "y", "z"};
        Stream<String> streamFromArray = Arrays.stream(array);

        // 使用 Stream.of 創建
        Stream<String> streamOf = Stream.of("1", "2", "3");

        // 創建無限流
        Stream<Integer> infiniteStream = Stream.iterate(0, n -> n + 2);

        // 打印流中的元素
        streamFromList.forEach(System.out::println);
        streamFromArray.forEach(System.out::println);
        streamOf.forEach(System.out::println);
        infiniteStream.limit(5).forEach(System.out::println);
    }
}

常見的中間操作

中間操作返回一個新的 Stream,對原有 Stream 進行處理。常見的中間操作有 filter、map、sorted 和 distinct 等。

filter - 過濾元素

filter 方法用于過濾元素:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamFilterExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
        List<Integer> evenNumbers = numbers.stream()
                                           .filter(n -> n % 2 == 0)
                                           .collect(Collectors.toList());
        System.out.println(evenNumbers); // 輸出: [2, 4, 6]
    }
}

map - 映射元素

map 方法用于將元素映射為新的元素:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamMapExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("hello", "world");
        List<Integer> wordLengths = words.stream()
                                         .map(String::length)
                                         .collect(Collectors.toList());
        System.out.println(wordLengths); // 輸出: [5, 5]
    }
}

sorted - 排序元素

sorted 方法用于對元素進行排序:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamSortedExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);
        List<Integer> sortedNumbers = numbers.stream()
                                             .sorted()
                                             .collect(Collectors.toList());
        System.out.println(sortedNumbers); // 輸出: [1, 2, 3, 4, 5]
    }
}

distinct - 去重元素

distinct 方法用于去除重復元素:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamDistinctExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5);
        List<Integer> distinctNumbers = numbers.stream()
                                               .distinct()
                                               .collect(Collectors.toList());
        System.out.println(distinctNumbers); // 輸出: [1, 2, 3, 4, 5]
    }
}

常見的終端操作

終端操作會觸發 Stream 的執行,并返回一個結果。常見的終端操作有 forEach、collect、reduce 和 count 等。

forEach - 遍歷元素

forEach 方法用于遍歷每一個元素:

import java.util.Arrays;
import java.util.List;

public class StreamForEachExample {
    public static void main(String[] args) {
        List<String> items = Arrays.asList("a", "b", "c");
        items.stream().forEach(System.out::println);
    }
}

collect - 收集元素

collect 方法用于將 Stream 的元素收集到一個集合中:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamCollectExample {
    public static void main(String[] args) {
        List<String> items = Arrays.asList("a", "b", "c");
        List<String> collectedItems = items.stream()
                                           .collect(Collectors.toList());
        System.out.println(collectedItems); // 輸出: [a, b, c]
    }
}

reduce - 規約元素

reduce 方法用于將元素組合起來:

import java.util.Arrays;
import java.util.List;

public class StreamReduceExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        int sum = numbers.stream()
                         .reduce(0, Integer::sum);
        System.out.println(sum); // 輸出: 15
    }

count - 統計元素個數

count 方法用于計算元素的個數:

import java.util.Arrays;
import java.util.List;

public class StreamCountExample {
    public static void main(String[] args) {
        List<String> items = Arrays.asList("a", "b", "c");
        long count = items.stream().count();
        System.out.println(count); // 輸出: 3
    }
}

實戰技巧

并行流 - 提高性能

并行流可以利用多核處理器的優勢,加快流操作的執行速度。可以通過 parallelStream 方法創建并行流:

import java.util.Arrays;
import java.util.List;

public class ParallelStreamExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        int sum = numbers.parallelStream()
                         .reduce(0, Integer::sum);
        System.out.println(sum); // 輸出: 15
    }
}

組合多個 Stream

可以使用 flatMap 方法將多個 Stream 組合為一個:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamFlatMapExample {
    public static void main(String[] args) {
        List<List<Integer>> listOfLists = Arrays.asList(
            Arrays.asList(1, 2, 3),
            Arrays.asList(4, 5, 6),
            Arrays.asList(7, 8, 9)
        );
        List<Integer> combinedList = listOfLists.stream()
                                                .flatMap(List::stream)
                                                .collect(Collectors.toList());
        System.out.println(combinedList); // 輸出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
    }
}

錯誤處理

在流操作中,可能會出現異常,可以使用 peek 方法進行調試:

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class StreamErrorHandlingExample {
    public static void main(String[] args) {
        List<String> items = Arrays.asList("1", "2", "a", "4");
        List<Integer> numbers = items.stream()
                                     .map(item -> {
                                         try {
                                             return Integer.parseInt(item);
                                         } catch (NumberFormatException e) {
                                             System.err.println("Error parsing: " + item);
                                             return null;
                                         }
                                     })
                                     .filter(Objects::nonNull)
                                     .collect(Collectors.toList());
        System.out.println(numbers); // 輸出: [1, 2, 4]
    }
}

注意事項

  • 流的惰性求值:中間操作是惰性求值的,只有終端操作執行時才會觸發實際的計算。
  • 不可重用:Stream 一旦使用完畢,不能再次使用。如果需要再次使用,需要重新生成 Stream。
  • 并行流的使用:并行流在某些情況下可以顯著提高性能,但并非所有場景都適用,應根據實際情況進行選擇。

結語

本文詳細介紹了 Java Stream API 的基本用法和一些實踐技巧。通過合理使用 Stream API,可以使代碼更加簡潔、高效。希望讀者能夠通過本文的介紹,更好地掌握和應用 Stream API。

責任編輯:趙寧寧 來源: 源話編程
相關推薦

2024-03-11 08:55:12

PythonCMD命令文件處理

2025-03-31 00:00:02

2025-01-15 07:55:30

2019-03-12 10:38:18

前端開發Nginx

2024-02-04 09:18:00

Python內存管理垃圾回收

2015-04-14 09:33:17

WatchKitAPP

2013-12-30 13:46:27

Android開發者

2014-04-18 13:20:34

Android安卓開發工具

2013-07-19 09:47:57

White ElephHadoopLinkedIn

2017-10-23 09:27:47

2022-09-15 17:08:20

JavaScripWeb開發

2014-04-01 13:50:28

安卓Android開發者

2014-02-01 21:31:10

JavaScriptJS框架

2021-04-08 10:40:24

前端工具代碼

2014-03-14 11:44:28

安卓開發者Android開發

2022-06-29 08:59:46

Java插件開發

2023-11-30 15:30:19

Python編程語言

2015-07-20 09:16:42

iOSWatchKit開發

2019-11-14 14:44:32

開發者工具

2012-02-13 10:21:11

Skala PreviiOS應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 婷婷精品 | 日韩久久久久久 | 综合久久久 | 丝袜美腿一区二区三区 | 国产91一区| 欧美精品一区二区三区在线播放 | 国产精品久久久久久久午夜片 | 中文字幕在线观 | 日本三级网址 | 精品少妇一区二区三区在线播放 | 国产香蕉视频在线播放 | 欧美三级在线 | 国产亚洲欧美在线 | 99在线免费视频 | 久久综合成人精品亚洲另类欧美 | 亚洲 欧美 日韩在线 | 精品视频一区二区 | 免费观看a级毛片在线播放 黄网站免费入口 | 日韩久久在线 | 久久久久国产精品 | av一级久久 | 黄色成人av | 天天草狠狠干 | 欧美一区二区三区久久精品 | 日韩欧美中文在线 | 91av精品 | 九色综合网 | 亚洲综合无码一区二区 | 自拍视频在线观看 | 7777在线视频免费播放 | 国产成人精品综合 | 国产成人在线播放 | 欧美日韩视频在线播放 | 中文字幕在线三区 | 五月精品视频 | 国产男女精品 | 国产激情一区二区三区 | 伊人伊人网| 色免费视频 | 精品视频免费在线 | 一级黄色绿像片 |