Java lambda 表达式的学习示例
来源:
Medium 在本文中,我们将了解 lambda 表达式,它是 Java 函数式编程的基础。
Lambda 表达式语法
lambda 表达式的语法直观、易于理解且易于使用。lambda 表达式由以下部分组成:
- 输入参数
- 运算符箭头
- 表达式/语句块
一般格式为:
<input-params> -> <function-code>
lambda 表达式的示例
Lambda 表达式最好通过示例来理解,所以让我们看一下其中的一些示例。
1.不接受输入,不返回输出
简单的 lambda 表达式不接受任何输入,也不返回任何输出——它实际上只是一个在没有任何上下文的情况下运行的代码块。
() -> System.out.println("Here I am!");
在输入参数位置的开头指定 (
)意味着不传递任何参数(与没有参数的方法后面的空括号一样)。
2. 接受单个输入,不返回输出
为了使 lambda 表达式接受参数,我们将其放置在输入参数位置:
name -> System.out.println("Here you are too, " + name + "!");
笔记:如果我们有一个输入参数,我们可以省略括号。我们也可以指定(name),这是完全可以接受的。
3.接受多个输入,不返回输出
当我们将多个输入参数传递给 lambda 表达式时,我们必须:
(name, food) -> System.out.println("So " + name + " enjoys eating " + food + "... interesting!");
4. 一个代码段中包含多个语句
将 lambda 表达式存储在一行语句中被认为是一种良好的做法。但您也可以使用多行:
() -> {
System.out.println("The owl and the pussycat went to sea");
System.out.println("in a beautiful pea green boat");
}
5. 从不指定返回类型
您可能已经注意到,定义 lambda 表达式时,没有指定返回类型。这是一个例子:
() -> System.out.println("I don't return anything!")
还有一件事:
() -> "I return this String!"
两个代码示例几乎相同,但第二个 lambda 返回一个字符串。使用它们时请记住这一点。当然,编译器会通过函数描述符的条件使用来理解它们之间的区别。
6. 尽可能自动应用类型推断
为了确定类型,编译器将使用类型推断。为此,它会查看 lambda 表达式的执行上下文。对于开发人员来说,这意味着他们不必担心转换为特定类型。
7. 函数描述符表示法
当我们考虑 lambda 表达式可以分配给什么类型时,使用函数描述符非常有用。函数句柄本质上是 lambda 表达式(或方法)提供的方法签名。它的语法几乎与 lambda 表达式相同,只是有一个输出类型部分而不是代码部分。这是一个例子:
<input-parameter-types> -> <output-parameter-type>
函数描述符的示例
以下是函数描述符的一些示例:
() -> () 不带输入参数且不返回值的方法。
(String) -> () 接受输入参数但不返回值的方法。
() -> (int, float) 一种不带输入参数并返回
int和
float(int[]) ->的方法。
(SortedMap<Character, Integer>) 方法,采用
int数组并返回从
Character到
Integer的SortedMap。在考虑可用于 lambda 表达式的目标类型时,拥有函数描述符可以更轻松地评估类型兼容性。
结论
正如您所看到的,lambda 表达式是一种简洁明了的行为封装方式。它是随着 JDK 8 的发布而在 Java 中引入的函数式编程范式的基础之一。
IntelliJ IDEA 7 个最被低估的功能
资料来源:
Better Programming 很难相信,但多年后我仍然遇到不了解 IntelliJ IDEA 中这些强大功能的人。
1.找到任何东西
记住每个组合键并跟踪 IntelliJ IDEA 可以执行的所有操作非常困难。这就是我经常在 IntelliJ IDEA 中使用搜索的原因。这可以帮助我在一个地方找到我需要的菜单项、工具、设置,甚至文件。
2. 知道你在哪里
在我发现这个功能之前,我使用“选择打开文件”按钮在项目树中显示当前编辑的文件。
现在 IntelliJ IDEA 为我做到了。这不是默认选项,因此您需要为每个新项目或现有项目进行设置。
3. SQL优化
您是否知道 IDE 中的默认数据库插件不仅仅是一个简单的 SQL 执行器?鉴于持久层 (I/O) 始终是应用程序中最慢的部分,我始终确保在使用关系数据库时我的 SQL 查询具有良好的执行计划。
4. 多行编辑
您以前可能在 Sublime Text Editor 中使用过此功能。
5. 后退/前进
事实上,我经常通过按后退或前进按钮回到之前的位置。
后退/前进:⌥⌘+左/右箭头(对于 Win/Linux,Ctrl+Alt+左/右箭头)。要打开最近的文件,请按 ⌘E(对于 Win/Linux 为 Ctrl+E)。
6. 书签
我为代码的重要部分添加了书签,以便我可以随时快速引用它们。
要转到书签,请按 ⌃+<数字>(对于 Win/Linux,按 Ctrl+<数字>)。我会立即说我一次不会使用三个以上的书签,因为这样就很难记住它们的用途。
7. 一个编辑器搞定一切
我曾经打开其他文本编辑器(例如 Visual Studio Code 或 Sublime)来保存部分代码、JSON、XML,然后链接到它们。但这不是代码库(项目)的一部分,当您尝试创建或编辑类似的内容时,IntelliJ IDEA 会清楚地提醒您这一点。然后我看到我的一位同事使用 Snippets,并意识到它是多么天才。
新片段文件:⇧⌘N(对于 Win/Linux,Shift+Ctrl+N)。片段可用并在项目的所有窗口之间同步。我经常使用它们来检查和格式化从其他地方获得的一些 JSON 或 SQL。
我的秘方
锦上添花的功能是每天为我节省大量打字时间:
Tabnine是一个 JetBrains 插件,用于编译 AI 支持的 Intellij IDEA 代码。现在是免费的,但是快点吧,我认为它不会持续很长时间。
GO TO FULL VERSION