1 /* 2 Interface Function<T,R> T input Type, R return Type 3 R apply(T t) 4 Interface Supplier<T> T return Type 5 T get() 6 Interface Consumer<T> T input Type 7 void accept(T t) 8 Interface Predicate<T> T input Type, return boolean 9 boolean test(T t) 10 11 */
1 public class Demo01 { 2 public static void main(String[] args) { 3 // Function<String, String> fuction = new Function<String, String>() { 4 // @Override 5 // public String apply(String s) { 6 // return s + "=>test..."; 7 // } 8 // }; 9 10 Function<String, String> fuction = (s)-> s + "=>tedst..."; 11 System.out.println(fuction.apply("My:")); 12 13 Function<String, Integer> f = (s1) -> { 14 int l = s1.length() + 4; 15 return l; 16 }; 17 18 System.out.println(f.apply("ssss")); 19 } 20 }
1 public class Demo02 { 2 public static void main(String[] args) { 3 // Predicate<Integer> predicate = new Predicate<Integer>() { 4 // @Override 5 // public boolean test(Integer integer) { 6 // return integer > 10; 7 // } 8 // }; 9 10 Predicate<Integer> predicate = (i) -> { 11 if (i < 1) 12 return true; 13 return false; 14 }; 15 System.out.println(predicate.test(-100)); 16 } 17 }
1 public class Demo03 { 2 public static void main(String[] args) { 3 // Supplier<Ticket> supplier = new Supplier<Ticket>() { 4 // @Override 5 // public Ticket get() { 6 // return new Ticket(10); 7 // } 8 // }; 9 //PECS:producer extends consumer super 10 Supplier<? extends Ticket> supplier = () -> new Ticket(10); 11 // System.out.println("new Ticketss:" + supplier.get().getNumber()); 12 13 Consumer<? super Ticket> consumer = (t)->{ 14 System.out.println("from consumer:" + t.getNumber()); 15 }; 16 17 consumer.accept(supplier.get()); 18 } 19 } 20 21 class Ticket { 22 private int number; 23 24 public Ticket(int number) { 25 this.number = number; 26 } 27 28 public int getNumber() { 29 return number; 30 } 31 }
1 // 数据库、集合 : 存数据的 2 // Stream:计算和处理数据交给 Stream 3 public class StreamDemo { 4 5 /** 6 * 按条件用户筛选: 7 * 1、id 为偶数 8 * 2、年龄大于24 9 * 3、用户名大写 映射 10 * 4、用户名倒排序 11 * 5、输出一个用户 12 * 13 * 请你只用一行代码完成! 14 */ 15 public static void main(String[] args) { 16 User u1 = new User(1,"a",23); 17 User u2 = new User(2,"b",24); 18 User u3 = new User(3,"c",22); 19 User u4 = new User(4,"d",28); 20 User u5 = new User(6,"e",26); 21 22 // 存储 23 List<User> users = Arrays.asList(u1, u2, u3, u4, u5); 24 // 计算等操作交给流 25 // forEach(消费者类型接口) 26 users.stream() 27 .filter(u->{return u.getId()%2==0;}) 28 .filter(u->{return u.getAge()>24;}) 29 .map(u->{return u.getName().toUpperCase();}) //流中的对象映射成大写String 30 .sorted((o1,o2)->{return o2.compareTo(o1);}) 31 .limit(1) 32 .forEach(System.out::println); 33 38 } 39 40 }
1 public class StreamDemo01 { 2 public static void main(String[] args) { 3 // Consumer<String> consumer = (str)-> System.out.println(str); 4 Consumer<Integer> consumer = System.out::println;//println 的方法签名和 Consumer的accept的签名(参数个数相同,有返回值)可直接引用 5 consumer.accept(1); 6 7 // Function<Long,Long> f = number -> Math.abs(number); 8 Function<Long, Long> f = Math::abs; 9 System.out.println(f.apply(-10L)); 10 11 // BiPredicate<String, String> b = (x,y)-> x.equals(y); 12 BiPredicate<String, String> b = String::equals; 13 System.out.println("==>" + b.test("ab", "abc")); 14 15 // Function<Integer, StringBuffer> f1 = (i) -> new StringBuffer(i); 16 Function<Integer, StringBuffer> f1 = StringBuffer::new; 17 StringBuffer sb = f1.apply(3); 18 System.out.println("xxx:" + sb.toString()); 19 20 // Function<Integer, int[]> fa = (num)-> new int[num]; 21 Function<Integer, int[]> fa = int[]::new; 22 System.out.println("arr length " + fa.apply(10).length); 23 } 24 }
小结:方法引用的思想,就是程序员不用关注函数式接口的实现,直接套用现有的方法来实现具体逻辑。
原文:https://www.cnblogs.com/jk2330/p/12435639.html