Java8实战-总结3
发布人:shili8
发布时间:2025-01-13 14:24
阅读次数:0
**Java8 实战 - 总结3**
在前两篇文章中,我们已经介绍了 Java8 的一些重要特性,包括 lambda 表达式、方法引用、函数接口等。今天我们将继续讨论 Java8 的其他重要特性,包括 Stream API、Optional 类和日期时间 API。
### **1. Stream API**
Stream API 是 Java8 中的一个非常重要的特性,它允许你以流水线方式处理数据。这意味着你可以使用一系列的操作来处理数据,而不需要一次性将所有数据加载到内存中。
#### **1.1 创建流**
要创建一个流,你可以使用 `Stream.of()` 方法,或者使用 `Arrays.stream()` 或 `Collections.stream()` 方法:
java// 使用 Stream.of() 方法创建流Listlist = Arrays.asList("a", "b", "c"); Stream stream = Stream.of(list.toArray(new String[0])); // 使用 Arrays.stream() 方法创建流int[] array = {1,2,3}; Stream stream2 = Arrays.stream(array); // 使用 Collections.stream() 方法创建流List list2 = new ArrayList<>(); list2.add("a"); list2.add("b"); list2.add("c"); Stream stream3 = Collections.stream(list2);
#### **1.2 流的操作**
流可以使用一系列的操作来处理数据。这些操作包括:
* `map()`:将流中的元素映射到另一个类型。
* `filter()`:过滤流中的元素,仅保留满足条件的元素。
* `sorted()`:对流中的元素进行排序。
* `distinct()`:去除流中重复的元素。
java// 使用 map() 方法将流中的元素映射到另一个类型Listlist = Arrays.asList("a", "b", "c"); Stream stream = Stream.of(list.toArray(new String[0])); stream.map(String::toUpperCase) .forEach(System.out::println); // 使用 filter() 方法过滤流中的元素int[] array = {1,2,3}; Stream stream2 = Arrays.stream(array); stream2.filter(i -> i >1) .forEach(System.out::println); // 使用 sorted() 方法对流中的元素进行排序List list2 = new ArrayList<>(); list2.add("c"); list2.add("b"); list2.add("a"); Stream stream3 = Collections.stream(list2); stream3.sorted() .forEach(System.out::println); // 使用 distinct() 方法去除流中重复的元素int[] array2 = {1,2,2,3}; Stream stream4 = Arrays.stream(array2); stream4.distinct() .forEach(System.out::println);
#### **1.3 流的收集**
流可以使用 `collect()` 方法来收集元素。这个方法返回一个集合,包含了流中的所有元素。
java// 使用 collect() 方法收集流中的元素Listlist = Arrays.asList("a", "b", "c"); Stream stream = Stream.of(list.toArray(new String[0])); List result = stream.collect(Collectors.toList()); System.out.println(result); // 使用 collect() 方法收集流中的元素int[] array = {1,2,3}; Stream stream2 = Arrays.stream(array); List result2 = stream2.collect(Collectors.toList()); System.out.println(result2);
### **2. Optional 类**
Optional 类是 Java8 中的一个重要特性,它允许你以一种更安全的方式处理可能为 null 的值。
#### **2.1 创建 Optional 对象**
要创建一个 Optional 对象,你可以使用 `Optional.of()` 方法,或者使用 `Optional.empty()` 方法:
java// 使用 Optional.of() 方法创建 Optional 对象String str = "Hello"; Optionaloptional = Optional.of(str); // 使用 Optional.empty() 方法创建 Optional 对象Optional empty = Optional.empty();
#### **2.2 Optional 的方法**
Optional 对象有以下几个方法:
* `isPresent()`:检查 Optional 对象是否包含值。
* `get()`:获取 Optional 对象中的值。如果 Optional 对象为空,则抛出 NoSuchElementException 异常。
* `orElse()`:如果 Optional 对象不为空,则返回其值;否则,返回指定的默认值。
java// 使用 isPresent() 方法检查 Optional 对象是否包含值String str = "Hello"; Optionaloptional = Optional.of(str); System.out.println(optional.isPresent()); // true// 使用 get() 方法获取 Optional 对象中的值int[] array = {1,2,3}; Optional optional2 = Arrays.stream(array).findFirst(); System.out.println(optional2.get()); // 使用 orElse() 方法获取 Optional 对象中的值String str2 = "Hello"; Optional empty = Optional.empty(); System.out.println(empty.orElse("World")); // World
### **3. 日期时间 API**
日期时间 API 是 Java8 中的一个重要特性,它允许你以一种更方便的方式处理日期和时间。
#### **3.1 创建日期对象**
要创建一个日期对象,你可以使用 `LocalDate.now()` 方法,或者使用 `LocalDate.of()` 方法:
java// 使用 LocalDate.now() 方法创建日期对象LocalDate date = LocalDate.now(); // 使用 LocalDate.of() 方法创建日期对象LocalDate date2 = LocalDate.of(2022,1,1);
#### **3.2 日期的方法**
日期对象有以下几个方法:
* `getYear()`:获取年份。
* `getMonth()`:获取月份。
* `getDayOfMonth()`:获取日。
java// 使用 getYear() 方法获取年份LocalDate date = LocalDate.now(); System.out.println(date.getYear()); //2022// 使用 getMonth() 方法获取月份LocalDate date2 = LocalDate.of(2022,1,1); System.out.println(date2.getMonth()); // JANUARY// 使用 getDayOfMonth() 方法获取日LocalDate date3 = LocalDate.of(2022,1,1); System.out.println(date3.getDayOfMonth()); //1
#### **3.3 日期的加减**
日期对象可以使用 `plusDays()`、`plusWeeks()`、`plusMonths()` 和 `plusYears()` 方法进行加减:
java// 使用 plusDays() 方法加一天LocalDate date = LocalDate.now(); System.out.println(date.plusDays(1)); // 使用 plusWeeks() 方法加一周LocalDate date2 = LocalDate.of(2022,1,1); System.out.println(date2.plusWeeks(1)); // 使用 plusMonths() 方法加一个月LocalDate date3 = LocalDate.of(2022,1,1); System.out.println(date3.plusMonths(1)); // 使用 plusYears() 方法加一年LocalDate date4 = LocalDate.of(2022,1,1); System.out.println(date4.plusYears(1));
#### **3.4 日期的比较**
日期对象可以使用 `isAfter()`、`isBefore()` 和 `isEqual()` 方法进行比较:
java// 使用 isAfter() 方法比较两个日期LocalDate date = LocalDate.now(); LocalDate date2 = LocalDate.of(2022,1,1); System.out.println(date.isAfter(date2)); // true// 使用 isBefore() 方法比较两个日期LocalDate date3 = LocalDate.of(2022,1,1); LocalDate date4 = LocalDate.now(); System.out.println(date3.isBefore(date4)); // true// 使用 isEqual() 方法比较两个日期LocalDate date5 = LocalDate.of(2022,1,1); LocalDate date6 = LocalDate.of(2022,1,1); System.out.println(date5.isEqual(date6)); // true
### **总结**
Java8 的 Stream API、Optional 类和日期时间 API 是 Java8 中非常重要的特性。它们允许你以一种更安全的方式处理可能为 null 的值, 以一种更方便的方式处理日期和时间。这些特性可以帮助你编写更加高效和安全的代码。
### **参考**
* [Java8 Stream API]( />* [Java8 Optional 类]( />* [Java8 日期时间 API](