private static class Utils {
public static int compareByLength(String in, String out) {
return in.length() - out.length();
}
}
private class MyObject {
public int compareByFirstChar(String in, String out) {
return in.charAt(0) - out.charAt(0);
}
}
@Test
public void testMethods() {
String[] args = new String[] { "microsoft", "apple", "linux", "oracle", "123" };
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String in, String out) {
return in.length() - out.length();
}
};
//传统的写法
Arrays.sort(args, comparator);
//引用静态类Utils里面的compareByLength方法
Arrays.sort(args, Utils::compareByLength);
MyObject mj = new MyObject();
//引用mj里面的compareByFirstChar方法
Arrays.sort(args, mj::compareByFirstChar);
//Lambda表达式写法
Arrays.sort(args, (in, out) -> {
return in.length() - out.length();
});
//引用System.out里面的println方法
Arrays.asList(args).forEach(System.out::println);
}
Arrays.sort(args, Utils::compareByLength);这种写法称作"方法引用"(Method references),也就是当我们需要将args排序时,不需要重新new一个Comparator类实现compare方法,可以引用一个已经存在的类的方法。当然,这个已存在的方法必须和compare方法的参数能对得上,并且被引用的接口必须是一个"函数接口"(FunctionalInterface).函数接口是java8引入的概念,一个函数接口只有一个抽象方法(default方法是一个实现)。
分享到:
相关推荐
2. **方法引用来替代匿名内部类**:与lambda表达式一起,Java 8允许使用方法引用,可以直接引用已有方法,减少代码冗余。 3. **流(Stream)**:流API允许对集合进行函数式编程操作,如过滤、映射和聚合,大大简化了...
方法引用的概念是随着Java 8的发布引入的,它是函数式编程特性的一部分,旨在简化代码并提高可读性。本篇文章将深入探讨Java方法引用的各个方面。 首先,我们要理解什么是函数式接口。在Java中,函数式接口是指只有...
2. **方法引用和构造器引用**:这些新特性与lambda表达式一起,增强了Java对函数式编程的支持。方法引用允许直接引用已有方法,而构造器引用则可以用来直接创建对象实例。 3. **默认方法**:在接口中定义默认方法,...
- **方法引用和构造器引用**:与Lambda表达式一起,这些特性简化了调用已有方法或构造器的方式。 - **默认方法**:接口中可以定义带有实现的方法,使得接口可以进行扩展而不破坏向后兼容性。 - **Stream API**:...
- **J2EE**: Java 2平台企业版,为企业级应用提供了Java API和服务。 - **Hibernate**: 一个对象关系映射(Object-Relational Mapping, ORM)工具,简化了Java应用中的数据库操作。 - **事务(Transaction)**: 是指对...
自从Android Studio支持Java 8特性后,开发者可以利用Java 8的新功能,比如lambda表达式、方法引用来提升代码的可读性和效率。然而,需要注意的是,不是所有的Android版本都原生支持Java 8特性,Android 7.1可能需要...
以一个名为Welcome2.java的简单Java程序为例,演示了如何定义一个类,以及如何在主方法中编写代码来输出一段文本。通过这个例子,学生可以理解Java程序的基本结构和运行机制。 以上就是《java-JAVA-电子教案.pdf》...
- **数据类型**:Java分为基本数据类型和引用数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)以及类、接口和数组。 - **变量与常量**:理解变量的...
中介者模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该...
Java Maven 项目中,CKFinder 2.3 是一个常用的内容管理和文件上传工具,它能够与后端应用程序集成,提供用户友好的界面来管理和上传文件。CKFinder 的 Maven 依赖是开发人员在 Java 应用中整合这个功能的关键。下面...
2. **环境配置**:学习Java的第一步通常是安装Java Development Kit (JDK)并设置环境变量,包括JAVA_HOME、PATH和CLASSPATH,以便编译和运行Java程序。 3. **基本语法**:包括数据类型(如整型、浮点型、字符型、...
2. **JSP(JavaServer Pages)**:JSP是一种用于创建动态网页的技术,它将HTML代码与Java代码结合在一起,使得页面内容可以根据用户行为或服务器状态动态生成。 3. **JDBC(Java Database Connectivity)**:JDBC是...
- **封装**:封装是将数据和方法结合在一起,对外提供有限的接口,隐藏内部实现细节,增强数据的安全性。 - **多态性**:多态性使得不同的对象可以响应相同的消息,提高代码的灵活性和可复用性,包括参数化多态和...
3. **封装**:封装是面向对象编程的基本原则之一,通过将数据和操作数据的方法绑定在一起,对外隐藏实现细节,提高代码的安全性和可维护性。 4. **继承**:Java支持单继承,一个类可以继承另一个类的属性和方法,...
3. **默认方法**:在接口中,Java 8引入了默认方法(default methods),它们有实现的接口方法,可以在不破坏旧代码的情况下增加新功能。这使得接口能够添加新行为,而无需强制已实现该接口的类进行修改。 4. **...
### Java学习PPT知识点详解:引用数据类型与对象 #### 一、面向对象的基本概念 面向对象编程(Object-Oriented Programming, OOP)是一种软件设计思想,它将程序视为一组对象的集合,并通过这些对象之间的交互来...
- **可变参数列表的限制**:虽然可变参数列表非常方便,但它也有一些限制,比如不能与其他参数一起出现在方法签名中,只能放在最后一个位置。 #### 结论 通过对Java中参数传递方式的学习,我们可以更加熟练地掌握...
- 方法引用和构造器引用是Java 8的另一大改进,它们使得操作更加简洁。 - 新增了Stream API,为集合操作提供了更高级别的抽象,使得数据处理更高效,代码更简洁。 - Date和Time API的重大更新,提供了更丰富的...
1. **变量和数据类型**:Java提供了基本数据类型(如int、char、float、double等)和引用数据类型(如类、接口、数组)。变量是用来存储数据的容器,必须先声明其数据类型,然后才能使用。 2. **运算符**:Java支持...
- **封装**:是指将数据和操作数据的方法绑定在一起,隐藏对象内部的细节,仅暴露对外接口。 - **继承**:允许一个类继承另一个类的属性和方法,从而支持代码重用和类的层次结构构建。 - **多态**:是指一个接口可以...