首页 > 编程语言 > 详细

Java8新特性学习

时间:2020-03-07 17:26:45      阅读:50      评论:0      收藏:0      [点我收藏+]

1.四个函数式接口

 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 }

2. Stream流式计算

 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 }

 

3.方法引用

 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 }

小结:方法引用的思想,就是程序员不用关注函数式接口的实现,直接套用现有的方法来实现具体逻辑。

 

Java8新特性学习

原文:https://www.cnblogs.com/jk2330/p/12435639.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!