参考博文
https://www.cnblogs.com/franson-2016/p/5593080.html
Lambda表达式的语法
基本语法:
(parameters) -> expression
或
(parameters) ->{ statements; }
下面是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)
详细示例1
package pojo;
import java.util.Arrays;
import java.util.List;
public class Test_1 {
public static void main(String[] args) {
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.println(player + "; ");
}
//使用 lambda 表达式以及函数操作(functional operation)
players.forEach((a) ->
{
System.out.println(a + "; ");
}
);
}
}
详细示例2
package pojo;
public class Test_2 {
public static void main(String[] args) {
// 1.1使用匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello world !");
}
}).start();
//1.2使用 lambda expression
new Thread(() -> System.out.println("Hello world !")).start();
}
}
详细示例3
package pojo;
import java.util.Arrays;
import java.util.Comparator;
public class Test_3 {
public static void main(String[] args) {
String[] players = {"a", "c",
"e", "f",
"z", "w",
"b", "W",
"S", "E"};
// 1.1 使用匿名内部类根据 name 排序 players
Arrays.sort(players, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return (s1.compareTo(s2));
}
});
//使用 lambda expression 方式1
Arrays.sort(players, (String s1, String s2) -> s1.compareTo(s2));
//使用 lambda expression 方式2
Comparator<String> paixu = (String s1, String s2) -> s1.compareTo(s2);
Arrays.sort(players, paixu);
System.out.println(Arrays.asList(players));
}
}
详细示例4
package pojo;
import java.util.ArrayList;
import java.util.function.Consumer;
import java.util.function.Predicate;
class Person {
private String firstName, lastName, job, gender;
private int salary, age;
public Person(String firstName, String lastName, String job,
String gender, int age, int salary) {
this.firstName = firstName;
this.lastName = lastName;
this.gender = gender;
this.age = age;
this.job = job;
this.salary = salary;
}
public Person() {
}
}
public class Test_4 {
public static void main(String[] args) {
ArrayList<Person> javaProgrammers = new ArrayList<Person>() {
{
add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));
add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));
add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));
add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));
add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));
add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));
add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));
add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));
add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));
add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));
}
};
ArrayList<Person> phpProgrammers = new ArrayList<Person>() {
{
add(new Person("Jarrod", "Pace", "PHP programmer", "male", 34, 1550));
add(new Person("Clarette", "Cicely", "PHP programmer", "female", 23, 1200));
add(new Person("Victor", "Channing", "PHP programmer", "male", 32, 1600));
add(new Person("Tori", "Sheryl", "PHP programmer", "female", 21, 1000));
add(new Person("Osborne", "Shad", "PHP programmer", "male", 32, 1100));
add(new Person("Rosalind", "Layla", "PHP programmer", "female", 25, 1300));
add(new Person("Fraser", "Hewie", "PHP programmer", "male", 36, 1100));
add(new Person("Quinn", "Tamara", "PHP programmer", "female", 21, 1000));
add(new Person("Alvin", "Lance", "PHP programmer", "male", 38, 1600));
add(new Person("Evonne", "Shari", "PHP programmer", "female", 40, 1800));
}
};
//显示姓名
javaProgrammers.forEach((aa) -> {
System.out.printf("%s %s; ", aa.getFirstName(), aa.getLastName());
});
//加薪 5%
javaProgrammers.forEach((aa) -> {
aa.setSalary(aa.getSalary() / 100 * 5 + aa.getSalary());
});
//显示姓名 薪水
javaProgrammers.forEach((aa) -> {
System.out.println(aa.getFirstName() + " " + aa.getSalary());
});
//过滤
phpProgrammers.stream().filter(new Predicate<Person>() {
@Override
public boolean test(Person person) {
return person.getSalary() > 1400;
}
}).forEach(new Consumer<Person>() {
@Override
public void accept(Person person) {
System.out.println(person);
}
});
System.out.println();
//实现同上的效果
phpProgrammers.stream().filter((aa) -> (aa.getSalary() > 1400)).forEach((bb) -> System.out.println(bb));
//多个过滤器
Predicate<Person> filter_1 = (a) -> (a.getSalary() > 1400);
Predicate<Person> filter_2 = (a) -> {
return "female".equals(a.getGender());
};
Predicate<Person> filter_3 = (a) -> {
return a.getAge() > 25;
};
phpProgrammers.stream().filter(filter_1).filter(filter_2).filter(filter_3).forEach((p) -> {
System.out.println(p);
});
}
}