当前位置: 首页 > news >正文

Java8特性

一、Lambda表达式

Lambda表达式是Java 8引入的重要特性,允许将函数作为参数传递,实现函数式编程。

1.1 语法结构

(parameters) -> expression
或
(parameters) -> { statements; }

1.2 示例

// 无参数
() -> System.out.println("Hello Lambda");// 单参数
(x) -> x * x// 多参数
(x, y) -> x + y// 代码块
(x, y) -> {int sum = x + y;return sum;
}

1.3 使用场景

  • 简化匿名内部类代码
  • 作为函数式接口的实例
  • 与Stream API结合使用

二、函数式接口

函数式接口是只包含一个抽象方法的接口,使用@FunctionalInterface注解标识。

2.1 常见函数式接口

  • Predicate<T>: 接收T类型参数,返回boolean
  • Consumer<T>: 接收T类型参数,无返回值
  • Function<T, R>: 接收T类型参数,返回R类型结果
  • Supplier<T>: 无参数,返回T类型结果

2.2 示例

@FunctionalInterface
interface MyFunction {int apply(int a, int b);
}MyFunction add = (a, b) -> a + b;
System.out.println(add.apply(3, 5)); // 输出: 8

三、Stream API

Stream API提供了对集合数据的函数式操作,支持过滤、映射、聚合等操作。

3.1 主要操作

  • 中间操作: filter、map、sorted、distinct、limit等
  • 终端操作: collect、forEach、reduce、count、anyMatch等

3.2 示例

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");// 过滤以"A"开头的名字并转换为大写
List<String> result = names.stream().filter(name -> name.startsWith("A")).map(String::toUpperCase).collect(Collectors.toList());System.out.println(result); // 输出: [ALICE]

3.3 并行流

通过parallelStream()创建并行流,利用多核处理器提高性能:

int sum = numbers.parallelStream().filter(n -> n % 2 == 1).mapToInt(Integer::intValue).sum();

四、Optional类

Optional类用于处理可能为null的值,避免空指针异常。

4.1 主要方法

  • of(T value): 创建非空Optional对象
  • ofNullable(T value): 创建可能为空的Optional对象
  • empty(): 创建空Optional对象
  • isPresent(): 判断值是否存在
  • ifPresent(Consumer<? super T> consumer): 值存在时执行操作
  • orElse(T other): 值不存在时返回默认值
  • map(Function<? super T, ? extends U> mapper): 映射值

4.2 示例

Optional<String> name = Optional.ofNullable(getName());
name.ifPresent(n -> System.out.println("Hello, " + n));String defaultName = name.orElse("Unknown");

五、接口的默认方法和静态方法

Java 8允许接口中定义默认方法和静态方法。

5.1 默认方法

使用default关键字定义,实现类可以继承或重写:

public interface MyInterface {default void defaultMethod() {System.out.println("Default method");}
}

5.2 静态方法

接口中可以定义静态方法,提供工具功能:

public interface MyInterface {static void staticMethod() {System.out.println("Static method");}
}

六、方法引用

方法引用提供了一种引用已有方法的简洁方式。

6.1 类型

  • 静态方法引用: ClassName::staticMethod
  • 实例方法引用: instance::instanceMethod
  • 对象方法引用: ClassName::instanceMethod
  • 构造方法引用: ClassName::new

6.2 示例

// 静态方法引用
List<Integer> numbers = Arrays.asList(3, 1, 2);
numbers.sort(Integer::compare);// 对象方法引用
String str = "Hello";
Supplier<Integer> lengthSupplier = str::length;

七、新日期时间API

Java 8引入了java.time包,提供了全新的日期时间处理API。

7.1 主要类

  • LocalDate: 日期(年、月、日)
  • LocalTime: 时间(时、分、秒)
  • LocalDateTime: 日期和时间
  • ZonedDateTime: 带时区的日期时间
  • Instant: 时间戳
  • Period: 日期间隔
  • Duration: 时间间隔

7.2 示例

// 获取当前日期
LocalDate today = LocalDate.now();// 创建指定日期
LocalDate specificDate = LocalDate.of(2024, 9, 2);// 日期计算
LocalDate tomorrow = today.plusDays(1);// 格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formattedDate = today.format(formatter);

八、其他特性

8.1 Nashorn JavaScript引擎

替代Rhino引擎,支持在JVM中执行JavaScript代码:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval("print('Hello Nashorn');");

8.2 重复注解

使用@Repeatable注解实现重复注解:

@Repeatable(MyAnnotations.class)
public @interface MyAnnotation {String value();
}@MyAnnotation("value1")
@MyAnnotation("value2")
public class MyClass {}

8.3 类型注解

允许在任何使用类型的地方添加注解,增强类型检查:

List<@NonNull String> list;

8.4 HashMap性能优化

针对哈希冲突,Java 8引入红黑树结构,提高HashMap在冲突情况下的性能。

http://www.dtcms.com/a/364181.html

相关文章:

  • MyBatis-Plus 实现用户分页查询(支持复杂条件)
  • TNNLS-2025《Metric Learning-Based Subspace Clustering》
  • 实训云上搭建分布式Hadoop集群[2025] 实战笔记
  • 图像编码--监控摄像机QP设置大小?
  • 构建可扩展的 AI 应用:LangChain 与 MCP 服务的集成模式
  • 用 map() + reduce() 搞定咖啡店订单结算:从发票到报表的 Python 实战
  • C19T1
  • leetcode567.字符串的排列
  • 2025 年行政岗转型突破:解锁技能提升新方向
  • 数据集格式化内容提要解析 (70)
  • Base64编码的作用与应用场景
  • SpringBoot 事务管理避坑指南
  • GitLens VS Code插件测评:助力代码协作高效查提交记录,轻松解决分支管理与代码冲突
  • RestTemplate 连接池怎么合理的使用
  • YOLOv8改进有效系列大全:从卷积到检测头的百种创新机制解析
  • 【邀请函】代码四合院,静候君至 | GitCodeAI社区升级发布会
  • ELF文件格式解析
  • 【代码随想录day 22】 力扣 131.分割回文串
  • 数据结构——树(03二叉树,与路径有关的问题,代码练习)
  • MySQL-表的约束(上)
  • 英伟达Jetson Orin NX-YOLOv8s目标检测模型耗时分析
  • 写论文先卡骨架再卡内容?一周出初稿爽翻!AI 帮我把骨架搭得明明白白,填内容超顺
  • 零样本视觉模型(DINOv3)
  • 从静态到智能:用函数式接口替代传统工具类
  • 作物改良中的综合生物技术与人工智能创新--文献精读160
  • github添加SSH密钥
  • 使用 Python 的 SymPy 进行符号计算
  • XMind2025(思维导图)下载安装教程
  • Linux 内核定时器实验
  • 2025年IT行业大学生证书选择指南