- 選中一部分代碼,然后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()));} }