Java基礎第8天總結(map遍歷、Stream流)

  • 選中一部分代碼,然后CTRL+ALT+T,可以在外面套上while循環,try..catch之類的
  • 小案例:電影信息管理模塊:用戶可以上架、查詢、下架、下架某個主演參演的電影
package Demo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Movie {private String name;private double score;private String actor;private double price;
}
package Demo;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class MovieService {private static List< Movie> movies = new ArrayList<>();private static Scanner sc = new Scanner(System.in);public void start() {while (true) {//選中一塊區域,然后CTRL+ALT+TSystem.out.println("===電影信息操作系統===");System.out.println("1、上架");System.out.println("2、下架");System.out.println("3、查詢某個電影");System.out.println("4、封殺某個明星");System.out.println("5、退出");System.out.println("請您輸入操作命令:");int command = sc.nextInt();switch (command) {case 1:addMovie();break;case 2://removeMovie();break;case 3:searchMovie();break;case 4:banStar();break;case 5:System.out.println("退出成功!!");return;default:System.out.println("輸入的命令有誤!");}}}private void banStar() {System.out.println("====封殺明星====");System.out.println("請輸入要封殺的明星:");String star = sc.next();for (int i = 0; i < movies.size(); i++) {Movie movie = movies.get(i);if (movie.getActor().contains(star)) {movies.remove(movie);System.out.println("封殺成功!");i--;}}}private void searchMovie() {System.out.println("====查詢電影====");System.out.println("請輸入要查詢的電影名稱:");String name = sc.next();Movie movie = searchMovieByName(name);if (movie != null) {System.out.println(movie);}else{System.out.println("沒有找到該電影!");}}//根據電影名字查詢電影對象返回public Movie searchMovieByName(String name) {for (Movie movie : movies) {if (movie.getName().equals(name)) {return movie;}}return null;}private void addMovie() {System.out.println("====上架電影====");//1、創建電影對象,封裝這部電影信息Movie movie = new Movie();//2、給電影對象注入數據System.out.println("請輸入電影名稱:");movie.setName(sc.next());System.out.println("請輸入電影評分:");movie.setScore(sc.nextDouble());System.out.println("請輸入主演:");movie.setActor(sc.next());System.out.println("請輸入價格:");movie.setPrice(sc.nextDouble());//3、將電影對象添加到集合中movies.add(movie);System.out.println("上架成功");}
}
package Demo;public class Test {public static void main(String[] args) {//1、創建電影對象:定義電影類//2、創建一個電影操作對象:專門負責對電影數據進行業務處理MovieService movieService = new MovieService();movieService.start();}
}


  • Map集合的三種遍歷方式:
package Demo;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class MapTest {public static void main(String[] args) {Map<String,Integer> map = new HashMap<>();map.put("張三", 18);map.put("李四", 19);map.put("王五", 20);System.out.println(map);System.out.println("------------------");//1、將map集合的全部鍵放到set集合中Set<String> keys = map.keySet();for (String key : keys) {Integer value = map.get(key);System.out.println(key + "=" + value);}System.out.println("------------------");//2、把map集合轉換成set集合,里面的元素類型都是鍵值對類型(Map.Entry<String,Integer>)Set<Map.Entry<String, Integer>> entries = map.entrySet();//快捷鍵:map.entrySet().var+回車for (Map.Entry<String, Integer> entry : entries) {//快捷鍵:entries.for+回車String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + "=" + value);}System.out.println("------------------");//3、直接調用map集合的forEach方法遍歷map.forEach((key,value)->{System.out.println(key + "=" + value);});}
}


  • Stream流
  • 小案例:找到以“張”開頭,并且是三個字的元素,存儲到一個新集合
package Demo;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class StreamDemo {public static void main(String[] args) {//找到以“張”開頭,并且是三個字的元素,存儲到一個新集合List<String> list = new ArrayList<>();list.add("張無忌");list.add("周芷若");list.add("趙敏");list.add("張強");list.add("張三豐");list.add("張小四");//法一:傳統方法:找出姓張,名字三個字的,存入新集合中List<String> newList = new ArrayList<>();for (String name : list) {if (name.startsWith("張") && name.length() == 3) {newList.add(name);}}System.out.println(newList);System.out.println("-----------------");//法二:使用Stream流List<String> newList2 = list.stream().filter(name -> name.startsWith("張")).filter(name -> name.length() == 3).collect(Collectors.toList());System.out.println(newList2);}
}
  • 獲取Stream流的方式

package Demo;import java.util.*;
import java.util.stream.Stream;public class StreamDemo {public static void main(String[] args) {//獲取Stream流的方式//1、獲取集合的Stream流:調用集合提供的stream()方法Collection<String> list = new ArrayList<>();Stream<String> s1 = list.stream();//快捷鍵:list.stream().var+回車//2、Map集合,怎么去拿Stream流Map<String,Integer> map = new HashMap<>();//獲取鍵流Stream<String> s2 = map.keySet().stream();//獲取值流Stream<Integer> s3 = map.values().stream();//獲取鍵值對流Stream<Map.Entry<String,Integer>> s4 = map.entrySet().stream();//3、數組,獲取數組的Stream流String[] arr = {"張三","李四","王五"};Stream<String> s5 = Arrays.stream(arr);Stream<String> s6 = Stream.of(arr);Stream<String> s7 = Stream.of("張三","李四","王五");}
}
  • Stream提供的常用的中間方法,對流上的數據進行處理(返回新流,支持鏈式編程)

package Demo;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;public class StreamDemo {public static void main(String[] args) {//掌握Stream提供的常用的中間方法,對流上的數據進行處理(返回新流,支持鏈式編程)List<String> list = new ArrayList<>();list.add("張無忌");list.add("周芷若");list.add("趙敏");list.add("張強");list.add("張三豐");list.add("張小四");//1、過濾方法list.stream().filter(s -> s.startsWith("張")&&s.length()==3).forEach(s -> System.out.println(s));System.out.println("--------------------------------");//2、排序方法List<Double> scores = new ArrayList<>();scores.add(99.9);scores.add(66.6);scores.add(66.6);scores.add(77.7);scores.stream().sorted().forEach(s -> System.out.println(s));//默認升序System.out.println("--------------------------------");scores.stream().sorted((s1,s2) -> Double.compare(s2,s1)).forEach(s -> System.out.println(s));//降序System.out.println("--------------------------------");scores.stream().sorted((s1,s2) -> Double.compare(s2,s1)).limit(2).forEach(s -> System.out.println(s));//降序并且取前兩個System.out.println("--------------------------------");scores.stream().sorted((s1,s2) -> Double.compare(s2,s1)).skip(2).forEach(s -> System.out.println(s));//降序并且跳過前兩個System.out.println("--------------------------------");scores.stream().sorted((s1,s2) -> Double.compare(s2,s1)).distinct().forEach(s -> System.out.println(s));//去重System.out.println("--------------------------------");//映射/加工方法:把流上原來的數據拿出來變成新數據又放到流上去scores.stream().map(s -> "加十分后"+(s+10)).forEach(s -> System.out.println(s));System.out.println("--------------------------------");//合并流:Stream<String> s1 = Stream.of("張無忌", "周芷若", "趙敏", "張強", "張三豐", "張小四");Stream<Integer> s2 = Stream.of(1,2,3);Stream<Object> s3 = Stream.concat(s1, s2);System.out.println(s3.count());}
}
  • Stream流的終結方法
package Demo;import java.util.*;
import java.util.stream.Collectors;public class StreamDemo {public static void main(String[] args) {List<Teacher> teachers = new ArrayList<>();teachers.add(new Teacher("張三", 18, 5000));teachers.add(new Teacher("李四", 19, 6000));teachers.add(new Teacher("王五", 20, 7000));teachers.stream().filter(t -> t.getSalary() > 5000).forEach(System.out::println);//遍歷輸出System.out.println("--------------------------------");long count = teachers.stream().filter(t -> t.getSalary() > 5000).count();//統計個數System.out.println(count);System.out.println("--------------------------------");Optional<Teacher> max = teachers.stream().max((t1, t2) -> Integer.compare(t1.getSalary(), t2.getSalary()));System.out.println(max.get());//獲取最大值System.out.println("--------------------------------");Optional<Teacher> min = teachers.stream().min((t1, t2) -> Integer.compare(t1.getSalary(), t2.getSalary()));System.out.println(min.get());//獲取最小值System.out.println("--------------------------------");List<String> list = new ArrayList<>();list.add("張無忌");list.add("周芷若");list.add("趙敏");list.add("張強");list.add("張三豐");list.add("張小四");//收集到list集合List<String> newList = list.stream().filter(s -> s.startsWith("張")).collect(Collectors.toList());//收集到set集合Set<String> newSet = list.stream().filter(s -> s.startsWith("張")).collect(Collectors.toSet());//收集到數組String[] newArray = list.stream().filter(s -> s.startsWith("張")).toArray(String[]::new);//toArray() 方法默認會返回 Object[] 類型的數組,而通過 String[]::new 可以直接得到 String[] 類型的數組//收集到map集合Map<String, Integer> newMap = list.stream().filter(s -> s.startsWith("張")).collect(Collectors.toMap(s -> s, s -> s.length()));}
}

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

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

相關文章

總線矩陣的原理

總線矩陣&#xff08;Bus Matrix&#xff09;是多主設備共享多從設備的智能連接與仲裁核心&#xff0c;本質是一個“靈活的交叉開關陣列”&#xff0c;用于解決多個主設備&#xff08;如CPU、DMA、GPU&#xff09;同時訪問多個從設備&#xff08;如內存、外設、存儲芯片&#x…

硬件開發_基于Zigee組網的果園養殖監控系統

一.系統概述 果園環境監控系統功能如下&#xff1a; 核心控制器&#xff1a;以STM32為核心控制器&#xff0c;承擔整體的數據采集、處理及控制任務。環境參數監測&#xff1a;集成溫度傳感器、CO?傳感器、光照傳感器和土壤濕度傳感器&#xff0c;可實時采集果園內的溫度、二氧…

K8s調度核心:從Pod分配到節點優化

在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;Pod 調度是指 K8s 系統根據特定規則和策略&#xff0c;將 Pod 合理分配到集群中的某個節點&#xff08;Node&#xff09;上運行的過程。其核心目標是確保 Pod 在合適的節點上高效、穩定地運行&#xff0c;充分利用集群資…

Tomcat 企業級運維實戰系列(四):Tomcat 企業級監控

Tomcat 企業級運維實戰系列&#xff08;四&#xff09;&#xff1a;Tomcat 企業級監控一&#xff1a;監控工具1&#xff09;概述2&#xff09;流程3&#xff09;部署二&#xff1a;監控命令1&#xff09;jps2&#xff09;jstack3&#xff09;jmap4&#xff09;MAT 工具分析三&a…

技術干貨丨HyperMesh 新界面功能與技術升級解析

全文內容選自 Altair 區域技術交流會華東站Altair 高級技術經理 張晨《HyperWorks 2025&#xff1a;下一代建模可視化和二次開發平臺》演講1、引言今天我為大家介紹 HyperMesh——這個大家既熟悉又陌生的工具。說熟悉&#xff0c;是因為它一直是工程仿真領域的主流建模軟件&…

《IC驗證必看|隨機穩定性 / 再現性》

同一用例 A 機 pass、B 機 fail&#xff1f;——SystemVerilog 隨機穩定性 / 可復現性全攻略&#xff08;含代碼與排查清單&#xff09;你該到什么水平&#xff1f;&#xff08;對標 20k / 25k / 30k&#xff09; 20k&#xff08;入門會用&#xff09; 會 randomize()、$urando…

字符編碼的本質

目的 最近做一個加密方面的研究&#xff0c;加密之后的二進制&#xff0c;通過轉碼之后&#xff0c;再也找不回之前的二進制了。 怎么試都不行&#xff0c;真是非常得奇怪&#xff01;&#xff01;&#xff01;&#xff01;先說說字符編碼基礎知識 在信息技術的海洋中&#xff…

網格圖--Day03--網格圖DFS--2658. 網格圖中魚的最大數目,1034. 邊界著色,1020. 飛地的數量

網格圖–Day03–網格圖DFS–2658. 網格圖中魚的最大數目&#xff0c;1034. 邊界著色&#xff0c;1020. 飛地的數量 今天要訓練的題目類型是&#xff1a;【網格圖DFS】&#xff0c;題單來自靈艾山茶府。 適用于需要計算連通塊個數、大小的題目。 部分題目做法不止一種&#xff0…

新能源車焊接中發那科機器人保護氣省氣方法

在新能源汽車制造領域&#xff0c;焊接工藝是保障車身結構強度與安全性的關鍵環節&#xff0c;發那科焊接機器人憑借高精度與穩定性成為產線主力設備。保護氣體消耗在焊接成本中占比顯著&#xff0c;尋找高效省氣方法成為行業降本增效的核心需求。WGFACS節氣裝置以智能化控制技…

CornerNet2025再研究---將目標檢測問題視作關鍵點檢測與配對

CornerNet于2019年3月份提出&#xff0c;CW近期回顧了下這個在當時引起不少關注的目標檢測模型&#xff0c;它的亮點在于提出了一套新的方法論——將目標檢測轉化為對物體成對關鍵點(角點)的檢測。通過將目標物體視作成對的關鍵點&#xff0c;其不需要在圖像上鋪設先驗錨框(anc…

【C++】vector(2)

目錄 1. insert的實現 2. 迭代器失效 2.1 迭代器失效的兩種情況 指向已釋放的內存&#xff08;物理失效&#xff09; 元素移動導致迭代器指向錯誤&#xff08;邏輯失效&#xff09; 2.2 修改代碼 3. erase的實現 ?編輯修改代碼 4. resize的實現 5. 構造函數 5.1 默認…

機器翻譯:python庫translatepy的詳細使用(集成了多種翻譯服務)

更多內容請見: 機器翻譯修煉-專欄介紹和目錄 文章目錄 一、translatepy概述 1.1 translatepy介紹 1.1 安裝 二、基本使用 2.1 初始化 `Translator` 2.2 文本翻譯 2.3 語言檢測 2.4 獲取翻譯備選方案 2.5 單詞音標獲取 2.6 語音合成 2.7 例句查詢 2.8 拼寫檢查 三、高級功能 3.…

Spring Bean生命周期的完全指南

簡介&#xff1a;超越Bean——揭開Spring Bean的隱秘生活 想象一場復雜宏大的舞臺劇。作為觀眾&#xff0c;我們看到的是最終的演出——一個流暢運行的應用程序。但在這光鮮的幕后&#xff0c;隱藏著一套嚴謹細致的流程&#xff1a;選角&#xff08;實例化Bean&#xff09;、試…

網絡安全A模塊專項練習任務九解析

任務九&#xff1a;Linux操作系統安全配置-2任務環境說明&#xff1a; (Linux)系統&#xff1a;用戶名root&#xff0c;密碼1234561. 設置禁止使用最近用過的6個舊密碼&#xff0c;將配置文件中對應的部分截圖&#xff1b;編輯/etc/pam.d/system-auth文件&#xff0c;找到passw…

Linex進程管理

一、進程查看命令1.pstree用于查看進程樹之間的關系&#xff0c;誰是父進程&#xff0c;誰是子進程&#xff0c;可以清楚的看出來是誰創建了誰語法&#xff1a;pstree [選項] -A各進程樹之間的連接以ASCII碼字符來連接-U各進程樹之間的連接以utf8字符來連接&#xff0c;某些終…

手寫MyBatis第47彈:Interceptor接口設計與Invocation上下文傳遞機制--MyBatis動態代理生成與方法攔截的精妙實現

&#x1f942;(???)您的點贊&#x1f44d;?評論&#x1f4dd;?收藏?是作者創作的最大動力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;點贊&#x1f44d;收藏??留言&#x1f4dd;歡迎留言討論 &#x1f525;&#x1f525;&…

自動駕駛中的傳感器技術37——Lidar(12)

這里對當前Lidar中的一些常見問題進行專項論述。首先以禾賽Lidar為例&#xff0c;列出相關參數&#xff0c;以備論述。 圖1 禾賽AT128參數圖2 禾賽AT360參數圖3 禾賽AT1440參數圖4 禾賽AT128可靠性驗證項圖5 禾賽AT128產品證書1、Lidar的線束是什么&#xff0c;由什么決定&…

Meteor主題友鏈頁面自研

發布于&#xff1a;Eucalyptus-Blog Meteor主題雖然設計簡約現代&#xff0c;但由于缺乏原生的友情鏈接管理功能&#xff0c;許多博主只能將友情鏈接勉強添加在網站底部&#xff0c;這不僅影響頁面美觀&#xff0c;也不便于訪客查找和互動&#xff1b;為了解決這一痛點&#xf…

QT控件QPlainTextEdit、QTextEdit與QTextBrowser的區別

一.主要功能對比二.關鍵功能差異1.文本類型支持QPlainTextEdit&#xff1a;僅支持純文本&#xff08;Plain Text&#xff09;&#xff0c;不處理任何格式&#xff08;如字體、顏色、鏈接、圖片等&#xff09;。文本以原始字符形式存儲&#xff0c;適合處理日志、代碼、配置文件…

【思考】WSL是什么

WSL WSL是什么呢&#xff1f; WSL 是 windows subsystem for linux 的簡寫&#xff0c;指的是 windows10 的一個子系統&#xff0c;這個子系統的作用是在 windows 下運行 linux 操作系統。 有了WSL&#xff0c;就可以在 windows10 中運行linux操作系統了。許多在 linux 種運行的…