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)  

方法引用

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 <T, SOURCE extends Collection<T>, DEST extends Collection<T>> DEST transferElements(
        SOURCE sourceCollection, Supplier<DEST> collectionFactory) {

    DEST result = collectionFactory.get();
    for (T t : sourceCollection) {
        result.add(t);
    }
    return result;
}
// Lambda 
Set<Person> rosterSetLambda = transferElements(roster, () -> {
    return new HashSet<>();
});
Set<Person> rosterSet = transferElements(roster, HashSet::new);
Set<Person> rosterSet = transferElements(roster, HashSet<Person>::new);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,789评论 0 33
  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 10,066评论 0 23
  • 【石丰水墨】朝露 /2017 系列 局部 【石丰画语】艺术固化,与其它行业的思维固化大同小异。归根到底,人的这种容...
    石丰当代艺术阅读 1,342评论 2 2