map()函數是Stream類中的一個方法,它表示函數式編程概念。簡單來說,map()通過應用於函數將一個對象轉換為另一個對象。這就是Stream.map(函數映射器)將函數作為參數的原因。例如,通過使用map()函數,您可以通過將Integer.valueOf()方法應用於輸入列表上的每個String,將String列錶轉換為List of Integer。
您只需要一個映射函數將一個對象轉換為另一個對象,然後,map()函數將為您進行轉換。它也是一個中間Stream操作,這意味著您可以調用其他Stream方法,如過濾器,或者在此處收集以創建一系列轉換。
現在,來進入過濾方法,它會根據您給出的條件過濾元素。例如,如果列表包含數字而您只需要偶數,則可以使用過濾方法僅選擇可完全被2整除的數字。過濾方法會根據您提供的條件選擇元素,這就是過濾器(Predicate條件)接受Predicate對象的原因,它提供了一個應用於條件的函數。
如果條件的計算結果為true,則選擇該對象。否則,它將被忽略。與map類似,過濾器也是一個中間操作,這意味著您可以在調用過濾器後調用其他Stream方法。filter()方法也是惰性的,這意味著在調用reduce方法之前不會對它進行求值,它會在到達目標時立即停止。
如何在Java 8中使用Map和Filter
你需要一個很好的例子來理解這些概念。由於String和Integer是Java中最常見的數據類型,因此我選擇了一個既簡單又有趣的示例。我有一個String列表,例如{「1」,「2」,「3」,「4」,「5」,「6」}。我想處理這個列表,需要另一個只有偶數的整數列表。為了找到偶數,我首先需要將List of String轉換為List of Integer。為此,我可以使用java.util.Stream類的map()方法。
但是,在此之前,我們需要一個Stream作為java.util.stream類中定義的map()。這一點並不困難,因為您可以從任何集合中獲取流,例如List或Set,通過調用java.util.Collection接口中定義的stream()方法。映射(Function mapper)方法從技術上講是一個函數,它是java.util.function.Function接口的一個對象。然後將此函數應用於Stream的每個元素,以將其轉換為所需的類型。因為,我們需要將String轉換為Integer,我們可以將Integer.parseInt()或Integer.valueOf()方法傳遞給map()函數。
然後map()將返回一個包含偶數和奇數的整數流。要選擇偶數,我們可以使用filter()方法。它需要一個謂詞對象,它在技術上是一個將對象轉換為布爾值的函數。我們傳遞一個對象,它將返回true或false。然後,過濾器使用該信息將對象包含在結果流中。因此,為了僅包括偶數,我們調用filter(number -> number%2==0),這意味著每個數字將被除以2,如果沒有餘數,則將被選中。
這與我們在解決編碼問題時使用的邏輯相同,以檢查Java中給定數字是偶數還是奇數。但是,到目前為止,我們只有偶數整數的流 - 而不是整數列表,這就是我們需要使用它們的原因。因為我們需要一個List,所以我調用了collect(Collectors.toList()),它會將所有偶數累加到List中並返回。現在,我們需要通過類型推斷獲取該信息,因為我們已經通過將結果存儲到List <Integer>中來指定該信息。
最後,附上代碼如下: