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