java8特征之lambda运算

mbda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫他,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。
lambda表达式:
1.一个参数:param=>expr
2.多个参数:(param-list)=>expr
   
下面是Java lambda表达式的简单例子:
 
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
下面是案例和输出结果:
public static void main(String agr[]){
		String[] atp = {"Rafael Nadal", "Novak Djokovic",  
			       "Stanislas Wawrinka",  
			       "David Ferrer","Roger Federer",  
			       "Andy Murray","Tomas Berdych",  
			       "Juan Martin Del Potro"};  
			List<String> players =  Arrays.asList(atp);  
			  
			// 以前的循环方式  
			for (String player : players) {  
			     System.out.print(player + "; ");  
			}  
			//换行
			System.out.println();  
			// 使用 lambda 表达式以及函数操作(functional operation)  
			players.forEach((player) -> System.out.print(player + "; "));  
			//换行
			System.out.println();  
			// 在 Java 8 中使用双冒号操作符(double colon operator)  
			players.forEach(System.out::print);  

	}
 
输出结果
Rafael Nadal; Novak Djokovic; Stanislas Wawrinka; David Ferrer; Roger Federer; Andy Murray; Tomas Berdych; Juan Martin Del Potro; 
Rafael Nadal; Novak Djokovic; Stanislas Wawrinka; David Ferrer; Roger Federer; Andy Murray; Tomas Berdych; Juan Martin Del Potro; 
Rafael NadalNovak DjokovicStanislas WawrinkaDavid FerrerRoger FedererAndy MurrayTomas BerdychJuan Martin Del Potro
 案例2
public static void main(String args[]){
		  List<String> languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");

		  System.out.println("Languages which starts with J :");
		  filter(languages, (str)->((String) str).startsWith("J"));

		  System.out.println("Languages which ends with a ");
		  filter(languages, (str)->((String) 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)->((String) str).length() > 4);
		}

		 public static void filter(List<String> names, Predicate condition) {
		    for(String name: names)  {
		       if(condition.test(name)) {
		          System.out.println(name + " ");
		       }
		    }
		}
  输出结果:
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 
 
 

猜你喜欢

转载自5keit.iteye.com/blog/2342078
今日推荐