java.util.function
Supplier<T>:
仅含一个无参的办法,称为生产型接口,指定接口是什么泛型,get办法就返回什么类型的数据
T get():获取泛型参数指定类型的对象数据
public static String getString(Supplier<String> sup) { return sup.get(); } public static void main(String[] args) { String s = getString(() -> { return "123"; }); System.out.println(s); }
案例
public static int getMax(Supplier<Integer> sup) { return sup.get(); } public static void main(String[] args) { int[] arr1 = {2,323, -3434, 543, 23232, 23, -65}; int maxValue = getMax(() -> { int max = arr1[0]; for (int i : arr1) { if (i > max) { max = i; } } return max; }); System.out.println(maxValue); }
Consumer<T>:
生产一个指定泛型的数据,是一个消费型接口,
形象:void accpet(T t)
泛型执行什么类型,就可用accept办法生产什么类型的数据
public static void method(String name, Consumer<String> con) { con.accept(name); } public static void main(String[] args) { method("wan", (String name) -> { System.out.println(name); }); }
默认办法:
andThen
须要两个Consumer接口,能够把两个Consumer接口组合到一起,再对数据进行生产
public static void method(String name, Consumer<String> con1, Consumer<String> con2) { con1.andThen(con2).accept(name); } public static void main(String[] args) { method("hello", (t) -> { System.out.println(t.toUpperCase()); }, (t) -> { System.out.println(t.toLowerCase()); }); }
public static void method(String[] arr, Consumer<String> con1, Consumer<String> con2) { for (String message : arr) { con1.andThen(con2).accept(message); } } public static void main(String[] args) { String[] arr = {"dili, girl", "zz, girl", "hehei, male"}; method(arr, (message)-> { String name = message.split(",")[0]; System.out.print("name:" + name); }, (message) -> { String sexy = message.split(",")[1]; System.out.println("、性别:" + sexy + "。"); }); }
案例
public static void method(String[] arr, Consumer<String> con1, Consumer<String> con2) { for (String message : arr) { con1.andThen(con2).accept(message); } } public static void main(String[] args) { String[] arr = {"dili, girl", "zz, girl", "hehei, male"}; method(arr, (message)-> { String name = message.split(",")[0]; System.out.print("name:" + name); }, (message) -> { String sexy = message.split(",")[1]; System.out.println("、性别:" + sexy + "。"); }); }
和下列代码同理(上代码仅仅是用了andThen办法,有什么长处???)
public static void method(String[] arr, Consumer<String> con1) { for (String message : arr) { con1.accept(message); } } public static void main(String[] args) { String[] arr = {"dili, girl", "zz, girl", "hehei, male"}; method(arr, (message) -> { String[] ms = message.split(","); System.out.println("姓名:" + ms[0] + "..." + "性别:" + ms[1]); }); }
Predicate<T>:
对某种数据类型进行判断,返回一个boolean值
形象办法:
boolean test(T t)
public static boolean checkString(String s, Predicate<String> pre) { return pre.test(s); } public static void main(String[] args) { String s = "abcde"; //()中有没有参数,察看test办法中是否有参数 boolean b = checkString(s, (String str) -> { return str.length() > 5; }); System.out.println(b); }
默认办法:
and
public static boolean checkString(String s, Predicate<String> pre1, Predicate<String> pre2) { return pre1.and(pre2).test(s); } public static void main(String[] args) { String s = "abcde12"; boolean b = checkString(s, (String str) -> { return str.length() > 5; }, (String str) -> { return str.contains("a"); }); System.out.println(b); }
or
public static boolean checkString(String s, Predicate<String> pre1, Predicate<String> pre2) { return pre1.or(pre2).test(s); } public static void main(String[] args) { String s = "abc2"; boolean b = checkString(s, (String str) -> { return str.length() > 5; }, (String str) -> { return str.contains("a"); }); System.out.println(b); }
negate
public static boolean checkString(String s, Predicate<String> pre1) { return pre1.negate().test(s); } public static void main(String[] args) { String s = "abc2"; boolean b = checkString(s, (String str) -> { return str.length() > 5; }); System.out.println(b); }
案例
public static ArrayList<String> checkString(String[] arr, Predicate<String> pre1, Predicate<String> pre2) { ArrayList<String> list = new ArrayList<>(); for (String str : arr) { boolean b = pre1.and(pre2).test(str); if (b) { list.add(str); } } return list; } public static void main(String[] args) { String[] arr = {"wan, girl", "zzz, girl", "cccc, girl", "zzz, man"}; ArrayList<String> b = checkString(arr, (String str) -> { String name = str.split(", ")[0]; return name.length() == 3; }, (String str) -> { String sexy = str.split(", ")[1]; return sexy.equals("girl"); }); System.out.println(b.toString()); }