//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》介绍的很详细,推荐阅读