java8新特性

介绍流程:

Lambda表达式

Stream

Optional

 

附上思维导图:

 

1.Lambda表达式

 (1)特点:通过表达式来实现相关接口方法,简化使用匿名类的操作,提高代码整洁性。

 (2):常见的几种使用方式:

 1 public class TestLambda {
 2     //常见形式
 3     private Math add = (a, b) -> a + b;
 4     private Math remove = (int a, int b) -> a - b;
 5     private Math decade = (a, b) -> a * b;
 6     private Math square = (int a, int b) -> a / b;
 7     private Message msg = (a) -> System.out.println("测试" + a);
 8     private Map map = new HashMap();
 9 
10     @Test
11     //测试
12     public void test() {
13         Integer[] i = new Integer[]{1, 2, 3, 4};
14         map.put(1, "x");
15         map.put(2, "y");
16         //通过表达式实现接口方法 ->有返回值
17         System.out.println(add.caculate(1, 2));
18         System.out.println(remove.caculate(1, 2));
19         System.out.println(decade.caculate(1, 2));
20         System.out.println(square.caculate(1, 2));
21         //无返回值
22         msg.play(1);
23         //集合的遍历 ->遍历所有值
24         map.forEach((c, v) -> System.out.println(v));
25         //集合的遍历 ->遍历所有键
26         map.forEach((c, v) -> System.out.println(c));
27         Arrays.asList(i).sort((a, b) -> {
28             if (a > b) {
29                 return a;
30             }
31             return b;
32         });
33     }
34 }
35 
36 //声明为函数式接口:仅包含一个方法,且方法符合Lambda表达式使用规范
37 @FunctionalInterface
38 interface Math {
39     int caculate(int a, int b);
40 }
41 
42 @FunctionalInterface
43 interface Message {
44     void play(int a);
45 }

效果截图:

(3)Lambda表达式的优缺点:

优点:使用lambda表达式代替匿名类使用,接口方法实现,提高了代码的整洁性。

缺点:维护较难,对开发人员的要求也比较高。

 

2.Stream

(1)特点:能够对集合对象进行包装,对集合元素进行相关操作,如遍历,过滤,去重等等。

(2)常用方法:

 1 public class TestStream {
 2     private List<String> list = new ArrayList<>();
 3 
 4     @Test
 5     public void test() {
 6         list.add(0, "123");
 7         list.add(1, "456");
 8         list.add(2, "789");
 9         list.add(3, "456");
10         //运用流Stream进行过滤,将内容不是123字符串的内容过滤出来并获得个数
11         System.out.println(list.stream().filter(e -> !e.equals("123")).count());
12         //集合遍历forEach
13         list.stream().forEach(e -> System.out.println(e));
14         //将过滤出来的元素再放入一个集合列表中
15         List l2 = (List) list.stream().filter(e -> !e.equals("123")).collect(Collectors.toList());
16         //操作集合元素去重后拼接成字符串
17         String str = (String) list.stream().distinct().collect(Collectors.joining("-"));
18         System.out.println(str);
19         //遍历
20         l2.stream().forEach(e -> System.out.println(e));
21         //通过流stream获取新集合的首个Optional元素
22         System.out.println("首元素:" + l2.stream().findFirst());
23         //通过流Stream去重后元素个数
24         System.out.println("去重后个数为:" + l2.stream().distinct().count());
25         //lambda表达式的内部可以引用外部变量或局部变量,
26         // 但是不允许在表达式中对该变量进行修改,该变量只能被声明为final
27         int factor = 1;
28         //若修改该变量直接编译错误
29         /*  list.stream().forEach(e-> System.out.println(factor++));*/
30         //使用reduce可以操作集合内元素然后返回一个新值,
31         //可实现自定义值结果获取
32         System.out.println(list.stream().reduce((e, e2) -> {
33             return (Integer.parseInt(e) > Integer.parseInt(e2) ? e : e2);
34         }));
35     }
36 }

数组->流过滤->数组:

集合元素移除不需要的值:

 对集合进行判断 是否 符合某条件:

字符串去重:

效果截图:

 常用方法图解:

3.Optional

(1)特点:对于那些空对象的存在,在程序运行时报空指针异常使程序无法继续执行的情况下,可以对这类情况进行避免,使用Option类对这类空指针对象进行获取,判断,设默认值等。

(2)常用方法:

 1 public class TestOptional {
 2     private String str = "abc";
 3 
 4     @Test
 5     public void test() {
 6         //判断str对象是否为空
 7         Optional<String> optional = Optional.ofNullable(str);
 8         //如果为空或者null则返回Optional.empty,不为空返回Optional对象
 9         System.out.println(optional);
10         //若对象为空则报空指针异常->如果不确定为空尽量使用ofNullable()方法判断对象是否为空
11         System.out.println(Optional.of(str).get());
12         //获取与字符串内容为123不相同的字符串值
13         System.out.println("过滤"+optional.filter(e -> !e.equals("123")).get());
14         //判断当前的对象会否存在且不为空
15         System.out.println("当前对象不为空?"+optional.isPresent());
16         //对数据元素进行一定的修改,返回修改后的元素
17         System.out.println("map方法修改后:"+optional.map(e-> e+"x").get());
18         //如果获取的对象为空,那么就返回传入的参数值,如果不为空则返回原有值
19         str=null;
20         Optional<String> optional2 = Optional.ofNullable(str);
21         System.out.println(optional2.orElse("456"));
22     }
23 }

 

效果截图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

文章待完善。。。

posted @ 2019-10-11 18:14  无影云  阅读(214)  评论(0编辑  收藏  举报