1.函数式接口
1.1概念:java中有且只有一个抽象方法的接口。
1.2格式:
修饰符 interface接口名称 { public abstract返回值类型 方法名称(可选参数信息); //其他非抽象方法内容 } //或者 public interfaceMyFunctionalInterface { voidmyMethod(); }
@FunctionalInterface public interfaceMyFunctionalInterface { voidmyMethod(); }
public classDemo09FunctionalInterface { //使用自定义的函数式接口作为方法参数 private static void doSomething(MyFunctionalInterface inter) { inter.myMethod();
//调用自定义的函数式接口方法 } public static voidmain(String[] args) { //调用使用函数式接口的方法 doSomething(() ‐> System.out.println("Lambda执行啦!")); } }
2.函数式编程
public classDemo01Logger { private static void log(intlevel, String msg) { if (level == 1) { System.out.println(msg); } } public static voidmain(String[] args) { String msgA = "Hello"; String msgB = "World"; String msgC = "Java"; log(1, msgA + msgB +msgC); } }
@FunctionalInterface public interfaceMessageBuilder { String buildMessage(); }
public classDemo02LoggerLambda { private static void log(intlevel, MessageBuilder builder) { if (level == 1) { System.out.println(builder.buildMessage()); } } public static voidmain(String[] args) { String msgA = "Hello"; String msgB = "World"; String msgC = "Java"; log(1, () ‐ > msgA + msgB +msgC ); } }
public classDemo03LoggerDelay { private static void log(intlevel, MessageBuilder builder) { if (level == 1) { System.out.println(builder.buildMessage()); } } public static voidmain(String[] args) { String msgA = "Hello"; String msgB = "World"; String msgC = "Java"; log(2, () ‐ > {System.out.println("Lambda执行!"); return msgA + msgB +msgC; }); } }
public classDemo04Runnable { private static voidstartThread(Runnable task) { newThread(task).start(); } public static voidmain(String[] args) { startThread(() ‐ > System.out.println("线程任务执行!")); } }
importjava.util.Arrays; importjava.util.Comparator; public classDemo06Comparator { private static Comparator<String>newComparator() { return (a,b) ‐>b.length() ‐a.length(); } public static voidmain(String[] args) { String[] array = {"abc", "ab", "abcd"}; System.out.println(Arrays.toString(array)); Arrays.sort(array, newComparator()); System.out.println(Arrays.toString(array)); } }
第三章 常用函数式接口
public classDemo02Test { //定一个方法,方法的参数传递Supplier,泛型使用Integer public static int getMax(Supplier<Integer>sup) { returnsup.get(); } public static voidmain(String[] args) { int arr[] = {2, 3, 4, 52, 333, 23}; //调用getMax方法,参数传递Lambda int maxNum = getMax(()‐ >{ //计算数组的最大值 int max = arr[0]; for (inti : arr) { if (i >max) { max =i; } } returnmax; }); System.out.println(maxNum); } }
importjava.util.function.Consumer; public classDemo09Consumer { private static void consumeString(Consumer<String>function) { function.accept("Hello"); } public static voidmain(String[] args) { consumeString(s ‐ >System.out.println(s)); } }
importjava.util.function.Consumer; public classDemoConsumer { public static voidmain(String[] args) { String[] array = {"迪丽热巴,女", "古力娜扎,女", "马尔扎哈,男"}; printInfo(s ‐ > System.out.print("姓名:" + s.split(",")[0]), s ‐>System.out.println("。性别:" + s.split(",")[1] + "。"), array); } private static void printInfo(Consumer<String> one, Consumer<String>two, String[] array) { for(String info : array) { one.andThen(two).accept(info); //姓名:迪丽热巴。性别:女。 } } }
importjava.util.function.Predicate; public classDemo15PredicateTest { private static void method(Predicate<String>predicate) { boolean veryLong = predicate.test("HelloWorld"); System.out.println("字符串很长吗:" +veryLong); } public static voidmain(String[] args) { method(s ‐ > s.length() > 5); } }
importjava.util.function.Predicate; public classDemo16PredicateAnd { private static void method(Predicate<String> one, Predicate<String>two) { boolean isValid = one.and(two).test("Helloworld"); System.out.println("字符串符合要求吗:" +isValid); } public static voidmain(String[] args) { method(s ‐ > s.contains("H"), s ‐>s.contains("W")); } }
importjava.util.function.Predicate; public classDemo16PredicateAnd { private static void method(Predicate<String> one, Predicate<String>two) { boolean isValid = one.or(two).test("Helloworld"); System.out.println("字符串符合要求吗:" +isValid); } public static voidmain(String[] args) { method(s ‐ > s.contains("H"), s ‐>s.contains("W")); } }
importjava.util.function.Predicate; public classDemo17PredicateNegate { private static void method(Predicate<String>predicate) { boolean veryLong = predicate.negate().test("HelloWorld"); System.out.println("字符串很长吗:" +veryLong); } public static voidmain(String[] args) { method(s ‐ > s.length() < 5); } }
信息筛选
import java.util.ArrayList; import java.util.List; importjava.util.function.Predicate; public classDemoPredicate { public static voidmain(String[] args) { String[] array = {"迪丽热巴,女", "古力娜扎,女", "马尔扎哈,男", "赵丽颖,女"}; List<String> list = filter(array, s ‐ > "女".equals(s.split(",")[1]), s ‐>s.split(",")[0].length() == 4); System.out.println(list); } private static List<String> filter(String[] array, Predicate<String> one, Predicate<String>two) { List<String> list = new ArrayList<>(); for(String info : array) { if(one.and(two).test(info)) { list.add(info); } } returnlist; } }
importjava.util.function.Function; public classDemo11FunctionApply { private static void method(Function<String, Integer>function) { int num = function.apply("10"); System.out.println(num + 20); } public static voidmain(String[] args) { method(s ‐ >Integer.parseInt(s)); } }
importjava.util.function.Function; public classDemoFunction { public static voidmain(String[] args) { String str = "赵丽颖,20"; int age = getAgeNum(str, s ‐ > s.split(",")[1], s ‐>Integer.parseInt(s), n ‐>n += 100); System.out.println(age); } private static int getAgeNum(String str, Function<String, String> one, Function<String, Integer> two, Function<Integer, Integer>three) { returnone.andThen(two).andThen(three).apply(str); } }