Java 8函数式编程[试读]
2.1 第一个Lambda表达式
Java 8 的最大变化是引入了Lambda 表达式——一种紧凑的、传递行为的方式。它也是本书后续章节所述内容的基础,因此,接下来就了解一下什么是Lambda 表达式。 2.1 第一个Lambda表达式 Swing 是一个与平台无关的Java 类库,用来编写图形用户界面(GUI)。该类库有一个常见用法:为了响应用户操作,需要注册一个事件监听器。用户一输入,监听器就会执行一些操作(见例2-1)。 例2-1 使用匿名内部类将行为和按钮单击进行关联 button.addActionListener(new ActionListener() { public void actionPerfo... 查看全部[ 2.1 第一个Lambda表达式 ]
2.2 如何辨别Lambda表达式
Lambda 表达式除了基本的形式之外,还有几种变体,如例2-3 所示。 例2-3 编写Lambda 表达式的不同形式 Runnable noArguments = () -> System.out.println("Hello World"); ActionListener oneArgument = event -> System.out.println("button clicked"); Runnable multiStatement = () -> { System.out.print("Hel... 查看全部[ 2.2 如何辨别Lambda表达式 ]
2.3 引用值,而不是变量
如果你曾使用过匿名内部类,也许遇到过这样的情况:需要引用它所在方法里的变量。这时,需要将变量声明为final,如例2-5 所示。将变量声明为final,意味着不能为其重复赋值。同时也意味着在使用final 变量时,实际上是在使用赋给该变量的一个特定的值。 例2-5 匿名内部类中使用final 局部变量 final String name = getUserName(); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { System.out.... 查看全部[ 2.3 引用值,而不是变量 ]
2.4 函数接口
函数接口是只有一个抽象方法的接口,用作Lambda 表达式的类型。 在Java 里,所有方法参数都有固定的类型。假设将数字3 作为参数传给一个方法,则参数的类型是int。那么,Lambda 表达式的类型又是什么呢? 使用只有一个方法的接口来表示某特定方法并反复使用,是很早就有的习惯。使用Swing编写过用户界面的人对这种方式都不陌生,例2-2 中的用法也是如此。这里无需再标新立异,Lambda 表达式也使用同样的技巧,并将这种接口称为函数接口。例2-8 展示了前面例子中所用的函数接口。 例2-8 ActionListener 接口:接受ActionEvent 类型的参数,返回空 pub... 查看全部[ 2.4 函数接口 ]
2.5 类型推断
某些情况下,用户需要手动指明类型,建议大家根据自己或项目组的习惯,采用让代码最便于阅读的方法。有时省略类型信息可以减少干扰,更易弄清状况;而有时却需要类型信息帮助理解代码。经验证发现,一开始类型信息是有用的,但随后可以只在真正需要时才加上类型信息。下面将介绍一些简单的规则,来帮助确认是否需要手动声明参数类型。 Lambda 表达式中的类型推断,实际上是Java 7 就引入的目标类型推断的扩展。读者可能已经知道Java 7 中的菱形操作符,它可使javac 推断出泛型参数的类型。参见例2-9。 例2-9 使用菱形操作符,根据变量类型做推断 Map<String, Integer>... 查看全部[ 2.5 类型推断 ]
2.6 要点回顾
Lambda 表达式是• 一个匿名方法,将行为像数据一样进行传递。 • Lambda表达式的常见结构:BinaryOperator<Integer> add = (x, y) → x + y。 • 函数接口指仅具有单个抽象方法的接口,用来表示Lambda表达式的类型。... 查看全部[ 2.6 要点回顾 ]
2.7 练习
每章最后都附有一组练习,帮助读者实践并巩固本章的知识和新概念。练习答案可在GitHub(https://github.com/RichardWarburton/java-8-Lambdas-exercises)上本书所对应的代码仓库中找到。 1. 请看例2-15 中的Function 函数接口并回答下列问题。 例2-15 Function 函数接口 public interface Function<T, R> { R apply(T t); } a. 请画出该函数接口的图示。 b. 若要编写一个计算器程序,你会使用该接口表示什么样的Lambda 表达式? c. 下... 查看全部[ 2.7 练习 ]
书名: Java 8函数式编程
作者: [英] Richard Warburton
出版社: 人民邮电出版社
译者: 王群锋
出版年: 2015-3
页数: 148
定价: 39.00元
装帧: 平装
ISBN: 9787115384881