Java8-lambda

pzwdshxzt發表於2018-01-31
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_40254498/article/details/79217935

lambda

學習記錄lambda,java 8 引入lambda將是對使用集合的一次重大改變,雖然看著很難懂,但是用著用著就好了,本文將用幾個例子舉例,本文參考的網上的一些例子。違刪。新手挑戰區。


lambda主要的表示形式

(params) -> expression
(params) -> statement
(params) -> { statements }

Example
() – > System.out.println(” Lambda Expressions”);
(int i, int j) -> System.out.println(i+j);

Example No.1

遍歷陣列等

 List features = Arrays.asList("Lambdas", "Method", "Java", "Hello");
 features.forEach(n -> System.out.println(n));
 // 使用Java 8的方法引用更方便,方法引用由::雙冒號操作符標示,
 features.forEach(System.out::println);

Example No.2

獲取數字的個數、最小值、最大值、總和以及平均值

 List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
 IntSummaryStatistics stats = primes.stream().mapToInt((x) -> x).summaryStatistics();
 System.out.println("Highest prime number in List : " + stats.getMax());
 System.out.println("Lowest prime number in List : " + stats.getMin());
 System.out.println("Sum of all prime numbers : " + stats.getSum());
 System.out.println("Average of all prime numbers : " + stats.getAverage());

結果:
Highest prime number in List : 29
Lowest prime number in List : 2
Sum of all prime numbers : 129
Average of all prime numbers : 12.9

Example No.3

map – reduce 例子

List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
//這個是將每個數都變成浮點數 * 12
costBeforeTax.stream().map((cost) -> cost + .12 * cost ).forEach(System.out::println);
//這個是將每個數都變成浮點數 * 12 然後再算和
double bill = costBeforeTax.stream().map((cost) -> cost + .12*cost).reduce((sum, cost) -> sum + cost).get();
System.out.println("Total : " + bill);

結果:
112.0
224.0
336.0
448.0
560.0
Total : 1680.0

map---對列表的每個元素應用函式使用
// 將字串換成大寫並用逗號連結起來
List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada");
String G7Countries = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", "));
System.out.println(G7Countries);

Example No.4

匿名類

// Java 8之前:
new Thread(new Runnable() {
    @Override
    public void run() {
     System.out.println("Rock it!");
     System.out.println("Hello world");
    }
}).start();
//java8 支援
  new Thread (() -> {
      System.out.println("Rock it!");
      System.out.println("hello world!");
  }).start();

結果:
Rock it!
Hello world!

Example No.5

函式式介面Predicate
Java 8也新增了一個包,叫做 java.util.function。它包含了很多類,用來支援Java的函數語言程式設計。其中一個便是Predicate,使用 java.util.function.Predicate 函式式介面以及lambda表示式,可以向API方法新增邏輯,用更少的程式碼支援更多的動態行為。下面是Java 8 Predicate 的例子,展示了過濾集合資料的多種常用方法。Predicate介面非常適用於做過濾。

// 甚至可以用and()、or()和xor()邏輯函式來合併Predicate,
// 例如要找到所有以J開始,長度為四個字母的名字,你可以合併兩個Predicate並傳入
List<String> languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp","h","d","map","r");
Predicate<String> startsWithJ = (n) -> n.startsWith("J");
Predicate<String> fourLetterLong = (n) -> n.length() == 4;
languages.stream()
    .filter(startsWithJ.and(fourLetterLong))
    .forEach((n) -> System.out.print("nName, which starts with `J` and four letter long is : " + n));

執行結果
Original List : [Java, Scala, C++, Haskell, Lisp, h, d, map, r], filtered list : [Java, Scala, C++, Haskell, Lisp, map]