java8總結

java8總結

  • java8新特性總結
      • 1. 行為參數化
      • 2. lambda表達式
        • 2.1 函數式接口
        • 2.2 函數描述符
      • 3. Stream API
        • 3.1 付諸實踐

java8新特性總結

  • 行為參數化
  • lambda表達式
  • Stream Api

1. 行為參數化

  • 定義:行為參數化,就是一個方法接受多個不同的行為作為參數,并在內部使用它們,完成不同行為的能力。

  • 行為參數化可讓代碼更好地適應不斷變化的要求,減輕未來的工作量。傳遞代碼,就是將新行為作為參數傳遞給方法。

  • 方法引用:在Java 8里寫下 類::方法名的時候,你就創建了一個方法引用,你同樣可以傳遞它。

package org.study.firstbase;import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;/*** Hello world!*/
public class AppFilter {public static void main(String[] args) {testPredicate();}public static void testPredicate() {List<Apple> apples = new ArrayList<Apple>();apples.add(new Apple("green", 140));apples.add(new Apple("green", 160));apples.add(new Apple("red", 140));apples.add(new Apple("red", 160));List<Apple> result = filterApples(apples, Apple::isGreenApple);for (Apple apple : result) {System.out.println(apple);}List<Apple> result2 = filterApples(apples, Apple::isHeavyApple);for (Apple apple : result2) {System.out.println(apple);}}static List<Apple> filterApples(List<Apple> inventory, Predicate<Apple> p) {List<Apple> result = new ArrayList<Apple>();for (Apple apple : inventory) {if (p.test(apple)) {result.add(apple);}}return result;}
}

2. lambda表達式

你可以在函數式接口上使用Lambda表達式

2.1 函數式接口

在這里插入圖片描述

2.2 函數描述符

函數式接口的抽象方法的簽名基本上就是Lambda表達式的簽名。我們將這種抽象方法叫作函數描述符

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

3. Stream API

  • 流是“從支持數據處理操作的源生成的一系列元素”。
  • 流操作有兩類:中間操作終端操作
  • 謂詞:一個返回 boolean的函數
  • 總結
    • Streams API可以表達復雜的數據處理查詢。常用的流操作總結在表5-1中。
    • 你可以使用filter、distinct、skip和limit對流做篩選和切片。
    • 你可以使用map和flatMap提取或轉換流中的元素。 ?你可以使用findFirst和findAny方法查找流中的元素。你可以用allMatch、noneMatch和anyMatch方法讓流匹配給定的謂詞。
    • 這些方法都利用了短路:找到結果就立即停止計算;沒有必要處理整個流。
    • 你可以利用reduce方法將流中所有的元素迭代合并成一個結果,例如求和或查找最大元素。
    • filter和map等操作是無狀態的,它們并不存儲任何狀態。reduce等操作要存儲狀態才能計算出一個值。sorted和distinct等操作也要存儲狀態,因為它們需要把流中的所有元素緩存起來才能返回一個新的流。這種操作稱為有狀態操作。
    • 流有三種基本的原始類型特化:IntStream、DoubleStream和LongStream。它們的操
      作也有相應的特化。
    • 流不僅可以從集合創建,也可從值、數組、文件以及iterate與generate等特定方法
      創建。
    • 無限流是沒有固定大小的流。
      在這里插入圖片描述
3.1 付諸實踐

在本節中,你會將迄今學到的關于流的知識付諸實踐。我們來看一個不同的領域:執行交易的交易員。你的經理讓你為八個查詢找到答案。你能做到嗎?我們在5.5.2節給出了答案,但你應 該自己先嘗試一下作為練習。

(1) 找出2011年發生的所有交易,并按交易額排序(從低到高)。 (2) 交易員都在哪些不同的城市工作過?
(3) 查找所有來自于劍橋的交易員,并按姓名排序。
(4) 返回所有交易員的姓名字符串,按字母順序排序。
(5) 有沒有交易員是在米蘭工作的?
(6) 打印生活在劍橋的交易員的所有交易額。 (7) 所有交易中,最高的交易額是多少?
(8) 找到交易額最小的交易。

package org.study.streamApi;import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;public class CaseTask {public static void main(String[] args) {Trader raoul = new Trader("Raoul", "Cambridge");Trader mario = new Trader("Mario","Milan");Trader alan = new Trader("Alan","Cambridge");Trader brian = new Trader("Brian","Cambridge");List<Transaction> transactions = Arrays.asList(new Transaction(brian, 2011, 300),new Transaction(raoul, 2012, 1000),new Transaction(raoul, 2011, 400),new Transaction(mario, 2012, 710),new Transaction(mario, 2012, 700),new Transaction(alan, 2012, 950));//(1) 找出2011年發生的所有交易,并按交易額排序(從低到高)。transactions.stream().filter(d -> d.getYear() == 2011).sorted(Comparator.comparing(Transaction::getValue)).forEach(System.out::println);//(2) 交易員都在哪些不同的城市工作過?transactions.stream().map(t -> t.getTrader().getCity()).distinct().forEach(System.out::println);//(3) 查找所有來自于劍橋的交易員,并按姓名排序。transactions.stream().map(t -> t.getTrader()).filter(t -> t.getCity().equals("Cambridge")).distinct().sorted(Comparator.comparing(Trader::getName)).forEach(System.out::println);//(4) 返回所有交易員的姓名字符串,按字母順序排序。transactions.stream().map(t -> t.getTrader().getName()).distinct().sorted((x, y) -> x.compareTo(y)).forEach(System.out::println);//(5) 有沒有交易員是在米蘭工作的?boolean milan = transactions.stream().anyMatch(t -> t.getTrader().getCity().equals("Milan"));System.out.println(milan);//(6) 打印生活在劍橋的交易員的所有交易額。transactions.stream().filter(t -> t.getTrader().getCity().equals("Cambridge")).map(Transaction::getValue).forEach(System.out::println);//(7) 所有交易中,最高的交易額是多少?Optional<Integer> maxValue = transactions.stream().map(Transaction::getValue).reduce(Integer::max);System.out.println(maxValue.get());//(8) 找到交易額最小的交易。Optional<Integer> minValue = transactions.stream().map(Transaction::getValue).reduce(Integer::min);System.out.println(minValue.get());}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13576.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13576.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13576.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

harmony 文件上傳

圖片上傳 1&#xff0c; 獲取文件&#xff0c;這里指的是圖片 在鴻蒙內部有一個API pick選擇器&#xff0c;實現文件保存和文件選擇的功能&#xff0c; 使用pick對象創建PhotoViewPicker實例 傳入必要的參數&#xff0c;如選擇圖片的數量&#xff0c;和彈出窗口的位置&#xf…

【機器學習】前沿探索,如何讓前端開發更加搞笑

在當今數字化時代&#xff0c;機器學習的崛起為前端開發帶來了巨大的機遇和挑戰。隨著人工智能和數據科學的不斷進步&#xff0c;前端工程師不再局限于傳統的界面設計和交互體驗&#xff0c;而是開始探索如何將機器學習技術融入到他們的工作中&#xff0c;以創造更加智能、個性…

面了一個程序員,因為6休1拒絕了我

人一輩子賴以生存下去的主要就考慮三件事&#xff0c;職業&#xff0c;事業&#xff0c;副業&#xff0c;有其1-2都是很不錯的。如果還沒到40歲&#xff0c;那不妨提前想下自己可能遇到的一些情況&#xff0c;提前做一些準備&#xff0c;未雨綢繆些。 今年整體就業大環境也一般…

【手寫大跟堆詳解】

文章目錄 大跟堆介紹大跟堆的結構大跟堆的應用場景大跟堆的代碼實現 大跟堆介紹 大根堆&#xff08;Max Heap&#xff09;是一種特殊的二叉樹結構&#xff0c;它滿足以下兩個條件&#xff1a; 1.完全二叉樹&#xff1a;大根堆是一棵完全二叉樹&#xff0c;即除了最后一層外&am…

一分鐘快速排序

這個 quick_sort 函數是一個實現快速排序&#xff08;Quicksort&#xff09;算法的遞歸函數。快速排序是一種高效的排序算法&#xff0c;通常用于對大規模數據集進行排序。以下是對該函數的詳細解釋&#xff1a; 函數簽名 void quick_sort(int q[], int l, int r)q[]&#xf…

Qt_電腦wifi相關操作

項目描述: 在做項目時用到了獲取wifi的操作。在網上查找了好久資料,這里做一些總結。 這里有顯示當前電腦wifi連接狀態,列出wifi列表,連接斷開wifi等函數。歡迎大家留言添加文章內容。 使用范圍: windows電腦(中文的環境) 使用技術:windows的cmd命令。和對字符串的解析…

C語言學習筆記--運算符與表達式(7521字爆肝)

上午好&#xff0c;本來想上午改簡歷下午學習c語言的&#xff0c;但想了一下上午精力充沛還是用來學習比較好&#xff0c;雖然現在失業了&#xff0c;但住在我姨家有吃有住的&#xff0c;再次感謝我姨&#xff0c;我要抓緊時間修改簡歷&#xff0c;然后找個工作搬出去&#xff…

【回憶版】數據科學思維與大數據智能分析 2024考試

填空&#xff08;18分&#xff09;18個 1.對數變換對大數值的范圍進行壓縮&#xff0c;對小數值的范圍進行擴展 2.提取出大量高頻率項與低頻率項相關聯的虛假模式&#xff0c;即交叉支持&#xff08;cross-support&#xff09;模式 3.信息論中&#xff08;&#xff09; 4.幾種…

[數據集][目標檢測]彈簧上料檢測數據集VOC+YOLO格式142張2類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;142 標注數量(xml文件個數)&#xff1a;142 標注數量(txt文件個數)&#xff1a;142 標注類別…

yolov8訓練自己數據集時出現loss值為nan。

具體原因目前暫未尋找到。 解決辦法 將參數amp改成False即可。 相關資料&#xff1a; https://zhuanlan.zhihu.com/p/165152789 https://github.com/ultralytics/ultralytics/issues/1148

【BUG】Edge|聯想電腦 Bing 搜索報錯“Ref A: 亂碼、 Ref B:亂碼、Ref C: 日期” 的解決辦法

文章目錄 省流版前言解決辦法 詳細解釋版前言問題描述與排查過程解決辦法與總結 省流版 前言 我也不清楚咋滴了&#xff0c;Bing 搜索突然偶爾報錯&#xff1a; 換了代理關了插件都報錯。 參考&#xff1a; 我在用bing搜索時出現了如下代碼&#xff0c;導致bing無法使用&am…

nginx proxy_set_header詳解

proxy_set_header 是 Nginx 配置中的一個重要指令&#xff0c;特別是在使用 Nginx 作為反向代理時。該指令允許你修改由 Nginx 傳遞給代理后端的請求頭。這對于確保后端應用程序能夠接收到正確的客戶端信息&#xff08;如 IP 地址、主機名等&#xff09;以及控制緩存行為等場景…

1 計算機硬件-CPU-校驗碼-存儲系統-輸入輸出設備-總線結構

計算機硬件 考情分析&#xff1a;趨勢很小&#xff0c;22年考過&#xff0c;根據趨勢以后考的可能較小 基本組成&#xff1a;運算器&#xff0c;控制器&#xff0c;儲存器&#xff0c;輸入設備&#xff0c;輸出設備運算器和控制器也統稱為中央處理單元&#xff08;CPU&#xf…

【算法訓練 day37 檸檬水找零、長度最小的子數組、用最少數量的箭引爆氣球】

目錄 一、檸檬水找零-LeetCode 860思路實現代碼個人問題總結 二、根據身高重建隊列-LeetCode 406思路實現代碼個人問題總結 三.用最少數量的箭引爆氣球-LeeCode 406思路實現代碼個人問題總結 一、檸檬水找零-LeetCode 860 Leecode鏈接: leetcode 860 文章鏈接: 代碼隨想錄 視頻…

解鎖Nginx跨域謎題:3步打造安全高效的CORS策略

Nginx作為一款強大的Web服務器和反向代理服務器&#xff0c;經常被用于處理跨域資源共享&#xff08;CORS&#xff0c;Cross-Origin Resource Sharing&#xff09;策略&#xff0c;以允許或限制不同源之間的資源請求。CORS是一種安全策略&#xff0c;用于決定Web瀏覽器是否應允…

深度學習——圖像分類(CNN)—測試模型

測試模型 1.導入必要的庫2.加載測試數據集3.假設CSV文件中的圖像文件名是完整的路徑4.隨機選擇一張圖片進行展示5.加載圖像6.使用模型進行預測7.設置模型的預測結果8.計算準確率9.指定test文件夾路徑10.讀取名為image_path的圖片11.加載圖像12.檢查圖像是否為空 訓練的模型是上…

eNSP學習——OSPF單區域配置

目錄 相關命令 實驗背景 實驗目的 實驗步驟 實驗拓撲 實驗編址 實驗步驟 1、基礎配置 2、部署單區域OSPF網絡 3、檢查OSPF單區域的配置結果 OSPF——開放式最短路徑優先 基于鏈路狀態的協議&#xff0c;具有收斂快、路由無環、擴展性好等優點&#xff1b; 相關命令 […

【JAVA基礎之內部類】匿名內部類

&#x1f525;作者主頁&#xff1a;小林同學的學習筆錄 &#x1f525;小林同學的專欄&#xff1a;JAVA之基礎專欄 目錄 1.內部類 1.1 概述 1.1.1 什么是內部類 1.1.2 什么時候使用內部類 1.2 內部類的分類 1.3 成員內部類 1.3.1 獲取成員內部類對象的兩種方式 1.3.2 經典面試…

用C語言把一棵普通二叉樹安排得明明白白

1. 樹的相關術語 結點的度&#xff1a;一個結點含有的子樹的個數稱為該結點的度&#xff1b; 如上圖&#xff1a;A的為6 葉結點或終端結點&#xff1a;度為0的結點稱為葉結點&#xff1b; 如上圖&#xff1a;B、C、H、I...等結點為葉結點 非終端結點或分支結點&#xff1a;度不…

【Linux】-Tomcat安裝部署[12]

目錄 簡介 安裝 安裝部署JDK環境 解壓并安裝Tomcat 簡介 Tomcat是由Apache開發的一個Servlet容器&#xff0c;實現了對Servlet和JSP的支持&#xff0c;并提供了作為Web服務器的一些特有功能&#xff0c;如Tomcat管理和控制平臺、安全域管理和Tomcat閥等。 簡單來說&#…