Java 8 Map,Filter和Collect示例

2021-01-07 離開了編程我會死

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>中來指定該信息。

最後,附上代碼如下:

相關焦點

  • JAVA8 新特性詳解
    在Java 8之前一般某個函數應該返回非空對象但是偶爾卻可能返回了null,而在Java 8中,不推薦你返回null而是返回Optional。這個方法有三個對於原始類型的變種方法,分別是:mapToInt,mapToLong和mapToDouble。這三個方法也比較好理解,比如mapToInt就是把原始Stream轉換成一個新的Stream,這個新生成的Stream中的元素都是int類型。
  • Java簡潔之道:如何優雅地玩轉List
    Foreach遍歷list對於此問題,Java 8 添加了一個新的API稱為流Stream,讓代碼更高效、更簡潔。典型的stream使用示例java 8,為集合提供串行流(stream)和並行流(parallelStream)兩種生成流的方法。
  • Lambda 表達式的 10 個示例
    Java 8 lambda表達式示例我個人對Java 8發布非常激動,尤其是lambda表達式和流API。越來越多的了解它們,我能寫出更乾淨的代碼。雖然一開始並不是這樣。第一次看到用lambda表達式寫出來的Java代碼時,我對這種神秘的語法感到非常失望,認為它們把Java搞得不可讀,但我錯了。
  • Java Stream
    接下來,對流應用一系列數據處理操作: filter、 map、 sorted和collect。除了collect之外,所有這些操作都會返回另一個流,這樣它們就可以接成一條流 水線,於是就可以看作對源的一個查詢。最後, collect操作開始處理流水線,並返回結果(它 和別的操作不一樣,因為它返回的不是流,在這裡是一個List)。
  • 如何用Map、Filter和Reduce替換Python For循環?
    下面將分別簡要介紹三種技術,重點強調它們在JavaScript和Python中的語法不同,然後舉出如何替換常見For循環的示例。Map, Filter, 和Reduce是什麼?因此當使用map(), filter()或 reduce()時,如果需要對每個項執行多個操作,需要先定義函數,再把函數使用進去。
  • 【外文翻譯】外國友人寫得很不錯的Java Lambda表達式入門教程,我終於翻譯好給大家啦!!!
    lambda 表達式就和方法一樣, 它提供了一個正常的參數列表和一個使用這些參數的主體 (body, 可以是一個表達式或一個代碼塊)。Lambda 表達式還增強了集合庫。Java SE 8 添加了 2 個對集合數據進行批量操作的包: java.util.function 包以及 java.util.stream 包。
  • 每日一課 | 示例 Java 8 Stream 的 iterate 處理
    Stream.iterate(0, n -> n + 1) .filter(x -> x % 2 !Stream.iterate(new int[]{0, 1}, n -> new int[]{n[1], n[0] + n[1]}) .limit(20) .map(n -> n[0])    .forEach(x -> System.out.println(x));輸出量
  • Java學習進階-Stream流
    (name -> name.length() == 3).limit(3).forEach(name -> System.out.println(name));package com.p03Stream獲取流;import java.util.ArrayList;import java.util.List;import
  • python高階函數:map、filter、reduce的替代品
    其中將len函數傳給key參數,具體示例如下:這裡需要特別提示一下,任何單參數函數都能作為key參數的值。在函數式編程中,大家最熟悉的高階函數主要有map函數、filter函數、reduce函數和apply函數。python3中移除了apply。
  • Java 8的Stream代碼,你能看懂嗎?
    以下為正文:在Java中,集合和數組是我們經常會用到的數據結構,需要經常對他們做增、刪、改、查、聚合、統計、過濾等操作。相比之下,關係型資料庫中也同樣有這些操作,但是在Java 8之前,集合和數組的處理並不是很便捷。不過,這一問題在Java 8中得到了改善,Java 8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數據。
  • 實例中學習python的walk/map/filter/lambda
    我們本次就從此實例出發,去學習python語言中的walk/map/filter/lambda函數的使用。我們測試環境的當前目錄下除了兩個代碼文件:jsj_xx_1.py和jsj_xx_2.py,其餘都是測試相關的目錄和文件,具體如下:實例的需求是找到當前目錄下的後綴名為「.name1」和「.name2」的文件。
  • 從頭使用.map() .filter() 和.reduce(),你會有意想不到的收穫!
    在「碼農圈」,學習如何使用.map()、.filter()和.reduce()函數,我們讀到、看到和聽到的一切都很複雜,無法理解這些概念,因為它們是獨立的學習單元。聽說這些是意味著上升至啟蒙狀態的入門知識。
  • Python編程技巧:如何用Map, Filter, Reduce代替For循環?
    map、filter 和 reduce 這三種技術可以提供描述迭代原因的函數替代方案,以便避免過多的 for 循環。我之前在 JavaScript 中寫過這些技術的入門文章,但是它們在 Python 中的實現略有不同。
  • Java Stream Pipeline 流水線:Stream 基礎
    Lazniess當遇到 filter,統計字符長度等操作的時候,它都不會開始計算;只有當遇到結束操作,比如統計最大值 max 方法後,才會開始計算;所以,它的中間計算過程既 filter 和 mapToInt 都是懶惰的,而只有結束操作 max 是 Eagerly(殷切的);比如,我們將上述的步驟用流表述為,1234
  • Java8 Stream:2萬字20個實例,玩轉集合的篩選、歸約、分組、聚合
    更詳細說明請見:https://www.runoob.com/java/java8-optional-class.html接下來,大批代碼向你襲來!我將用20個案例將Stream的使用整得明明白白,只要跟著敲一遍代碼,就能很好地掌握。
  • Java 8 中處理集合的優雅姿勢——Stream
    相比之下,關係型資料庫中也同樣有這些操作,但是在Java 8之前,集合和數組的處理並不是很便捷。不過,這一問題在Java 8中得到了改善,Java 8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數據。本文就來介紹下如何使用Stream。
  • Java 8中處理集合的優雅姿勢——Stream
    相比之下,關係型資料庫中也同樣有這些操作,但是在Java 8之前,集合和數組的處理並不是很便捷。不過,這一問題在Java 8中得到了改善,Java 8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數據。本文就來介紹下如何使用Stream。特別說明一下,關於Stream的性能及原理不是本文的重點,如果大家感興趣後面會出文章單獨介紹。
  • 30 秒收集有用的 Java8 代碼片段
    文章作者:biezhi(https://github.com/biezhi)文章地址:https://github.com/biezhi/30-seconds-of-java8
  • 基礎篇:JAVA.Stream函數,優雅的數據流操作
    java提供了Stream的概念,它可以讓我們把集合數據當做一個個元素在處理,並且提供多線程模式並發流和CompletableFuture的配合使用「關注公眾號,一起交流,微信搜一搜: 潛行前行」1 stream的構造方式stream內置的構造方法public static<T> Stream