java8之新特性介紹(java 8 new features)

來源:互聯網
上載者:User
Java 8 new features with Example
https://www.youtube.com/playlist?list=PLsyeobzWxl7qbvNnJKjYbkTLn2w3eRy1Q


一、可以在介面中寫方法體
   在介面中增加新方法時,可以帶方法體。

   帶來的好處:
   當新介面發布時,以前實現該介面的類,無需改動。
   即:無需實現新添加的方法。

   文法:使用 default 關鍵字
Java代碼   interface A{       void show();       default void sayHello(){           System.out.println("Hello, World!");       }   }  

注意:
       1、實現多個介面時,介面中有重名的方法體的實現。

          如果同時實現兩個具有相同方法名且實現了該方法的介面,
          需要提供自己對該方法的實現。才可以解決衝突。

          sayHello() 重複,類 C 需要實現自己的 sayHello()
Java代碼   interface A{       void showA();       default void sayHello(){           System.out.println("Hello, A!");       }   }   interface B{       void showB();       default void sayHello(){           System.out.println("Hello, B!");       }   }      class C implements A,B{          public void sayHello(){           System.out.println("Hello, C!");       }          public static void main(String[] args){           C c = new C();           c.sayHello(); // Hello, C!       }   }  
     
      2、類方法的 優先順序 高於 介面方法

         介面 A 和 類 B 中都定義了方法 sayHello() 的實現,
         類 C 優先使用 類 B 的方法。

Java代碼   interface A{         void showA();         default void sayHello(){             System.out.println("Hello, A!");         }     }      class B{       public void sayHello(){             System.out.println("Hello, B!");         }     }          class C extends B implements A{             public static void main(String[] args){             C c = new C();             c.sayHello(); // Hello, B!         }     }  

       3、介面中不可以重寫 java.lang.Object 裡面的方法
Java代碼   interface A {          // can't define a equals method in interface.       default public boolean equals(){                 }   }  

       4、可以在介面中定義 static 方法
Java代碼   interface A{         void showA();         static void sayHello(){             System.out.println("Hello, A!");         }     }      class C {       public static void main(String[] args){             A.sayHello(); // Hello, A!       }     }  


二、Functional Programming  VS. Object Oriented Programming
  
   Functional Programming with Java 8
   https://www.youtube.com/watch?v=LcfzV38YDu4

面向函數的編程(Functional Programming)是指對於只有一個方法的介面可以使用 Lambda 運算式實現。

只有一個方法的介面很好的一個例子就是: java.lang.Comparable 介面。
它只有一個方法: compareTo(Object obj)



三、Lambda Expression ( -> 斜著看 )



Lambda Expression VS. Anonymous inner class
對於只有一個方法的介面的實作類別,寫實作類別時,只需提供( 參數 + Lambda + 方法體 )即可。

Java代碼   interface A{       void show();   }      public class LambdaDemo{       public static void main(String[] args){           A obj;                      // old           obj = new A(){               public void show(){                   System.out.println("Hello");               }           }              // java 8           obj = () -> {               System.out.println("Multiple");               System.out.println("Lines ... ");           }              // or           obj = () -> System.out.println("Single line.");          }   }  

說明:



四、為 java.lang.Iterable 介面增加了 forEach() 方法

NOTE:

1、java 8 之前, java.lang.Iterable 介面只有一個方法:
                java.util.Iterator<T> iterator()

2、java.util.Collection 介面,繼承了 java.lang.Iterable 介面。

Java代碼   import java.util.Arrays;   import java.util.List;   import java.util.function.Consumer;         class IConsumer implements Consumer<Integer>{       @Override       public void accept(Integer t) {           System.out.println(t);       }   }         public class Java8ForEach {           public static void main(String[] args) {           List<Integer> list =Arrays.asList(1,2,3,5,6);                       // normal loop           for(Integer i : list){               System.out.println(i);           }                       // Java 8 forEach - normal           Consumer<Integer> action = new IConsumer();           list.forEach(action);                       // Java 8 forEach - use lambda expressions.           // see how we do it in one liner           list.forEach(each -> System.out.println(each));                   }              }  


五、Streaming API

Java collections got a new package java.util.Stream.
classes in this package provide a stream API.
And supports functional-style operations on streams of elements.

Stream API enables bulk operations like sequential or parallel map-readuce on Collections.


Java代碼   //Java 7 or earlier:   public List listFilter(List<Integer> bigList){       List<Integer> filteredList = new ArrayList<>();       for (Integer p : bigList)  {           if (p  > 40) {               filteredList.add(p);           }        }       return filteredList;   }  
Java代碼   //Java 8:   public List listFilter(List<integer> bigList){       return bigList               .stream()               .filter(p -> p > 40)               .collect(Collectors.toList());   }  


-

So, if you know, in this world, it's an information age, we have a concept of "Big Data", "Haddoop", we have to process huge amount of data.

1) In stream we have two types of methods:

1. Intermediate method. Like: filter(), map()
   lazy, it can't give result immediately until you call a terminate method.

2. Terminate method. Like: findFirst(), forEach()

Example Given:
Java代碼   List<Integer> values = Arrays.asList(4,5,6,7,8);   values.stream().filter(i->{       Sysout.out.println("Hello");       return true;   });  


2) Stream is once used, it can't be reused:

Java代碼   Stream<Integer> s = values.stream();   s.forEach(Sysout.out::println);  // works   s.forEach(Sysout.out::println);  // throws Exception  





更多:

Java 9 新特性
http://programtalk.com/java/java-9-new-features/



引用:
Java 8 Stream API Features Lambda Expression
https://www.youtube.com/playlist?list=PLsyeobzWxl7otduRddQWYTQezVul0xIX6


http://programtalk.com/java/java-8-new-features/


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.