Java 中的箭头运算符2025年4月8日 | 阅读7分钟 在Java中,箭头运算符用于创建Lambda表达式。它是在Java 8中添加Lambda表达式功能时引入的。它将表达式体与参数分隔开。Lambda表达式通过消除与匿名类相关的样板代码,使得函数式编程成为可能,从而提高了代码的可读性和可维护性。 在这种情况下,语句是使用参数执行的操作,参数是Lambda表达式的输入。参数列表和Lambda表达式的Lambda表达式主体由箭头运算符(->)分隔。Lambda表达式可用于实现函数式接口,或者具有单个抽象方法的接口,如Runnable、Callable和Comparator,以及java.util.function包中的接口,如Function、Consumer、Supplier和Predicate。 为了使Java代码更易于理解和简洁,Java 8引入的Lambda表达式可以替代匿名类。 箭头运算符的优点
带有箭头运算符的方法引用方法引用为Lambda表达式提供了简写语法,进一步减少了冗余。它们通常与箭头运算符结合使用。 Lambda表达式的特性简洁易读的代码:Lambda表达式大大减少了样板代码量,尤其是在处理函数式接口的简单实现时。例如, 减少冗余:通过消除不必要的冗余,Lambda表达式使代码更具可读性和可理解性。例如, 函数式接口支持:Lambda使用具有单个抽象方法的接口(SAM)。Java提供了预定义的函数式接口,如Consumer、Predicate和Function。例如, 支持多个参数:像常规方法一样,Lambda可以接受多个参数。例如, 无需显式return语句:Java会自动返回由单个表达式组成的Lambda的结果。例如, 在下面的Java代码片段中,我们展示了如何在Java中(Java 8之前)创建匿名类。 在Java 8中,我们可以将上述代码片段写成如下形式。 为了更好地理解如何使用Lambda和箭头运算符,让我们看一些例子。 如何在Java中使用箭头运算符?在此示例中,使用Lambda表达式和箭头运算符实现了Drawable接口的draw()方法。这种方法使代码更简洁、更简单。Lambda表达式可用于实现Drawable接口,该接口是具有单个抽象方法的函数式接口。 示例编译并运行输出 Drawing Width is 20 解释 Java代码定义了一个具有单个抽象方法draw()的函数式接口Drawable。M类的main()方法演示了如何使用Lambda表达式来实现此接口。通过Lambda表达式() -> { System.out.println(" Drawing width is " + w); } 创建Drawable的实例,其中w是一个局部变量,代表绘图宽度。 这个Lambda表达式由箭头运算符(->)指示,提供了draw()方法的实现,并从周围环境中提取变量w。当调用d.draw()时,将执行重写的draw()方法,并在控制台打印“Drawing width is 20”。 我们可以在各种方式下在Java编程中使用Lambda表达式。这是一种使用函数式方法编写简洁代码的绝佳技术。以下是我们可以使用它的几种情况。 Java集合中的数组运算符在此示例中,我们使用Lambda表达式从ArrayList中过滤数据。为了达到预期结果,我们使用了filter()方法和Stream API。您可以看到Lambda代码比非Lambda代码编写起来简单得多。请看下面的说明。 示例编译并运行输出 Harshit: 100500.0 Sachin: 25000.0 解释 在上面的程序中,我们定义了一个Person类,具有三个属性:id、name和salary,以及一个用于初始化这些属性的构造函数。在main()方法内部,创建了一个Person对象的ArrayList,并填充了Person类的三个实例,每个实例都使用特定的id、name和salary值进行初始化。我们使用Stream API根据薪资过滤和处理产品列表。 l.stream()方法将列表转换为流,而filter()方法使用Lambda表达式q -> q.salary > 17000,过滤掉薪资大于17000的记录。 Java线程中的数组运算符在此示例中,我们使用Lambda表达式实现了Runnable接口的run()方法。由于Runnable是单方法接口,因此Lambda表达式易于使用。请看下面的说明。 示例编译并运行输出 Thread is running... 解释 随附的Java代码实现了Runnable接口,并演示了如何使用Lambda表达式创建和执行线程。M3类在javaexample包中的程序开头被声明。在main方法中,使用Lambda表达式定义了Runnable接口的run()方法。 run()方法使用Lambda表达式() -> { System.out.println("Thread is running..."); } 实现,该表达式只会在控制台打印“Thread is running...”。Runnable引用r1被赋值给这个Lambda表达式。它使用这个Runnable实例来创建一个新的Thread对象t1。最后,在t1上调用Thread类的start()方法。它启动新线程并调用run()方法,产生输出“Thread is running...” Java中的箭头运算符(->)的缺点Java的箭头运算符(->)使Lambda表达式更易于理解,使代码更易于阅读,但它也有一些缺点。 有限的调试支持:由于缺乏有用的堆栈跟踪,使用箭头运算符的Lambda表达式可能难以调试。 无法处理已检查的异常:Lambda表达式不允许像常规方法那样直接抛出已检查的异常(IOException、SQLException等)。必须在Lambda内部使用Try-catch,这降低了代码的整洁性。
复杂表达式的可读性问题:即使简单的Lambda易于阅读,包含多个操作或嵌套Lambda的复杂表达式可能会变得令人困惑。例如 某些情况下的性能开销:由于Lambda在并行和多线程编程中提高了性能,它们可能会在CPU密集型任务中增加开销。Lambda表达式的对象创建可能会导致更高的内存利用率,特别是如果优化不当。 使用this和super关键字的困难:结果引用的是Lambda外部的类,而不是Lambda本身。这可能会在处理方法引用和继承时导致问题。 结论Java中的箭头运算符在用于Lambda表达式时,显著提高了代码的可读性和简洁性。使用Lambda表达式可以提高代码的表现力和可维护性,尤其是在处理集合处理和函数式编程范例时。通过使用Lambda表达式、方法引用和Stream API,Java开发人员可以有效地应用现代编程技术。 下一主题Java学习应用程序 |
在本节中,我们将学习什么是节俭数,并创建Java程序来检查给定数字是否为节俭数。节俭数程序经常在Java编码面试和学术界中被问到。节俭数是一个... 节俭数是一个...
阅读 3 分钟
统计道路上通过的汽车数量问题只是众多典型算法问题之一,其实际目标是确定在同一条道路上朝相反方向行驶的汽车的有效对的总数。更具体地说,...
5 分钟阅读
Playfair密码由Charles Whetstone于1889年提出。但它以一位朋友Lord Lyon Playfair的名字命名,因为他推广了它的使用。它是最流行的对称加密技术之一,属于替换密码。它是一种编码程序,它...
阅读9分钟
在本节中,我们将讨论如何在 Java 中显示二进制矩阵中的唯一行。在此问题中,给定一个二进制矩阵,我们需要识别并打印给定二进制矩阵的唯一行。示例 1:说明:在上面的输入中……
21 分钟阅读
伯努利数是一类特殊的数字,在数论和分析中起着重要作用。这些数字主要用于几个三角函数、伽马函数、双曲函数等的级数展开。第n个伯努利数用Bn表示,可以通过以下方式定义... Nth Bernoulli number is denoted by Bn that can be defined by the following...
7 分钟阅读
Java 是一种功能强大且灵活的编程语言,用于构建广泛的程序,从简单的命令行工具到复杂的组织结构。随着 Java 任务的规模和复杂性的增加,正确组织和Structuring代码变得至关重要。这就是...
阅读 6 分钟
Java 提供了强大的面向对象编程功能,称为类。类可以作为蓝图来创建对象,因为它既包含数据又包含行为。除了定义共享的抽象类之外,还可以直接实例化的具体类...
阅读 4 分钟
是 Java 中可用的按位运算符之一。XOR(又名异或)接受两个布尔操作数,如果它们不同则返回 true。XOR 运算符的最佳用例是当两个给定的布尔条件不能同时为真时....
5 分钟阅读
线段树也是一棵二叉树,但它用于以更好的时间复杂度解决特定问题。与堆类似,Java 中的线段树也由数组表示。使用线段树的场景让我们了解在什么场景下...
阅读 8 分钟
Java 中的主线程是任何 Java 程序的关键组件。当 Java 程序启动时,线程会自动创建,并维护应用程序的 main() 方法。main() 方法作为程序的入口点,是初始方法...
阅读9分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India