Java8 lambda表达式例子

//Before Java 8: 
new Thread(new Runnable() { 
    @Override public void run() { 
           System.out.println("Before Java8, too much code for too little to do"); } }).start();

//Java 8 way: 
new Thread( () -> System.out.println("In Java8, Lambda expression rocks !!") ).start(); 

Output: too much code, for too little to do Lambda expression rocks !!

Java8下lambda表达式的格式如下:

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

 

// Before Java 8: 
JButton show = new JButton("Show"); show.addActionListener(new ActionListener() { 
     @Override public void actionPerformed(ActionEvent e) {       
          System.out.println("Event handling without lambda expression is boring"); 
     } 
});

 // Java 8 way: 
show.addActionListener((e) -> { System.out.println("Light, Camera, Action !! Lambda expressions Rocks"); });

 

  //Prior Java 8 : 
  List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time   API");
  for (String feature : features) { 
      System.out.println(feature); 
  } 

  //In Java 8: 
  List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API  ");
  features.forEach(n -> System.out.println(n)); // 迭代输出
  // 方法调用可以像C++一样用::来调用features.forEach(System.out::println);

  Output: Lambdas Default Method Stream API Date and Time API

 

	public static void main(String[] args) {
		List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp"); 
		System.out.println("Languages which starts with J :"); 
		filter(languages, (str)->str.startsWith("J")); 
		System.out.println("Languages which ends with a "); 
		filter(languages, (str)->str.endsWith("a")); 
		System.out.println("Print all languages :"); 
		filter(languages, (str)->true); 
		System.out.println("Print no language : "); 
		filter(languages, (str)->false); 
		System.out.println("Print language whose length greater than 4:"); 
		filter(languages, (str)->str.length() > 4); 
	} 
	
	public static void filter(List names, Predicate condition) { 
	    	names.stream().filter((name) -> (condition.test(name))).forEach((name) -> { System.out.pri                ntln(name + " "); }); 
	}

	Output: Languages which starts with J : Java Languages which ends with a Java Scala Print all languages : Java Scala C++ Haskell Lisp Print no language : Print language whose length greater than 4: Scala Haskell 

 

Oreilly 出版的《Java 8 Lambdas》介绍的很详细,推荐阅读

猜你喜欢

转载自clearity.iteye.com/blog/2051405