JavaSE-23.1.3【常用函式式介面之Consumer、Consumer案例-按要求列印資訊】
阿新 • • 發佈:2021-06-16
1 package day14.lesson1; 2 3 import java.util.function.Consumer; 4 5 /* 6 1.6 常用函式式介面之Consumer 7 8 Consumer介面 9 Consumer<T>介面也被稱為消費型介面,它消費的資料的資料型別由泛型T指定 10 11 常用方法 12 void accept(T t) 對給定的引數執行此操作 13 default Consumer andThen(Consumer after) 返回一個組合的Consumer,依次執行此操作,然後執行after操作14 */ 15 public class Demo6Consumer { 16 public static void main(String[] args) { 17 // Lambda表示式 18 /*operatorStr("tom", (String s) -> { 19 System.out.println(s); 20 });*/ 21 operatorStr("tom", s -> System.out.println(s)); // tom 22 /*operatorStr("tom", s->{23 StringBuilder sb = new StringBuilder(s); 24 StringBuilder reverse = sb.reverse(); 25 String ss = reverse.toString(); 26 System.out.println(ss); 27 });*/ 28 operatorStr("tom", s -> System.out.println(new StringBuilder(s).reverse().toString())); //mot 29 30 // 方法引用 31 operatorStr("tom", System.out::println); // tom 32 33 System.out.println("================================"); 34 operatorStr( 35 "sam", 36 s -> System.out.println(s), // 效果同System.out::println 37 s -> System.out.println(new StringBuilder(s).reverse().toString()) 38 ); // sam mas 39 } 40 41 // 消費一個字串資料 42 private static void operatorStr(String name, Consumer<String> con){ 43 con.accept(name); 44 } 45 46 // 用不同方式消費同一個字串資料兩次 47 private static void operatorStr(String name, Consumer<String> con1, Consumer<String> con2){ // 函式過載 48 // con1.accept(name); 49 // con2.accept(name); 50 con1.andThen(con2).accept(name); // 效果同上兩行 51 } 52 }
1 package day14.lesson1; 2 3 import java.util.function.Consumer; 4 5 /* 6 1.7 Consumer案例-按要求列印資訊 7 8 案例需求 9 String[] strArray = {"林青霞,30", "張曼玉,35", "王祖賢,33"}; 10 字串陣列中有多條資訊,請按照格式:“姓名:XX,年齡:XX"的格式將資訊打印出來 11 要求: 12 把列印姓名的動作作為第一個Consumer介面的Lambda例項 13 把列印年齡的動作作為第二個Consumer介面的Lambda例項 14 將兩個Consumer介面按照順序組合到一起使用 15 */ 16 public class Demo7Consumer { 17 public static void main(String[] args) { 18 String[] strArr= {"tom,20", "amy,18", "sam,21"}; 19 20 /*printInfo( 21 strArr, 22 (String s) -> { 23 String name = s.split(",")[0]; 24 System.out.print("姓名:" + name); 25 }, 26 (String s) -> { 27 String ageStr = s.split(",")[1]; 28 int age = Integer.parseInt(ageStr); 29 System.out.println(",年齡:" + age); 30 } 31 );*/ 32 33 printInfo( 34 strArr, 35 s -> System.out.print("姓名:" + s.split(",")[0]), 36 s -> System.out.println(",年齡:" + Integer.parseInt(s.split(",")[1])) 37 ); 38 /* 39 姓名:tom,年齡:20 40 姓名:amy,年齡:18 41 姓名:sam,年齡:21 42 */ 43 } 44 45 private static void printInfo(String[] strArr, Consumer<String> con1, Consumer<String> con2){ 46 for (String str: strArr){ 47 /*con1.accept(str); 48 con2.accept(str);*/ 49 con1.andThen(con2).accept(str); 50 } 51 } 52 }