2019/09/10

Java JDK8 Lambda

新公司主要用Java,雖然認識我的都知道我非常不太喜歡寫Java
不過既來之則安之吧
JDK7時就有聽過一些Java大師說到Java終於要出Lambda式寫法
在那之前我大概都是透過C#.Net的LINQ和Haskell去學習Lambda寫法
雖然相比之下,C#.Net LINQ還是剽悍許多,Haskell更加狂
或許這是Java算是有誠意的更新吧?XDDD

testProject;

import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class Test {

 public static void main(String[] args) {
  // 產生0-50 to ArrayList
  ArrayList<Integer> list = IntStream.range(0, 51).collect(ArrayList<Integer>::new, ArrayList::add,
    ArrayList::addAll);
  System.out.println("產生0-50數字");
  // 走訪n
  list.forEach(System.out::println);
  // Filter n is odd
  System.out.println("取奇數");
  list.stream().filter(n -> n % 2 != 0).collect(Collectors.toList()).forEach(System.out::print);
  // Filter n is even
  System.out.println("取偶數");
  list.stream().filter(n -> n % 2 == 0).collect(Collectors.toList()).forEach(System.out::println);
  // get summary statistics
  System.out.println("取得個數, 最小值, 最大值, 總和以及平均數\n" + list.stream().mapToInt(x -> x).summaryStatistics());
  // get the array sum
  System.out.println("取得總和\n" + list.stream().mapToInt(x -> x).summaryStatistics().getSum());
 }

}


執行結果: