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)  

方法引用

Lambda 小记_第1张图片
Paste_Image.png
//静态方法引用
object::instanceMethod
或
//特定对象的方法引用
Class::staticMethod
或
//特定类的任意对象的方法引用
Class::instanceMethod
或
//构造器引用
Class::new
Arrays.sort(rosterAsArray, (a, b) -> Person.compareByAge(a, b));
//这样直接引用了一个已有方法在 Java8 中写为
Arrays.sort(rosterAsArray, Person::compareByAge);
//这两种方法在语义上是等价的。

参考

  • 静态方法引用
Arrays.sort(rosterAsArray, Person::compareByAge);
  • 特定对象的方法引用
// Reference to an instance method of a particular object
class ComparisonProvider {
    public int compareByAge(Person a, Person b) {
        return a.getBirthday().compareTo(b.getBirthday());
    }
}
ComparisonProvider myComparisonProvider = new ComparisonProvider();
Arrays.sort(rosterAsArray, myComparisonProvider::compareByAge);
  • 特定类的任意对象的方法引用
// Reference to an instance method
// of an arbitrary object of a particular type
String[] stringArray = { "Barbara", "James", "Mary", "John",
        "Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
  • 构造器的引用
public static , DEST extends Collection> DEST transferElements(
        SOURCE sourceCollection, Supplier collectionFactory) {

    DEST result = collectionFactory.get();
    for (T t : sourceCollection) {
        result.add(t);
    }
    return result;
}
// Lambda 
Set rosterSetLambda = transferElements(roster, () -> {
    return new HashSet<>();
});
Set rosterSet = transferElements(roster, HashSet::new);
Set rosterSet = transferElements(roster, HashSet::new);

你可能感兴趣的:(Lambda 小记)