Java 8中的Stream API是一個強大的工具,它能夠幫助我們更加方便地處理數據集合。其中的Stream().filter是其中一個常用的函數,它可以使我們的代碼更加高效和清晰。本文將從以下幾個方面詳細闡述Stream().filter的用法和優越性。
一、篩選數據
Stream().filter的主要作用就是篩選集合中的數據,只保留符合條件的元素。這使得代碼更加簡潔,易於理解。
例如,我們有一個List,需要找出其中所有長度大於4的元素。通常的做法是使用for循環遍歷list,並判斷每個元素的長度。而使用Stream().filter,代碼如下:
List list = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
List filteredList = list.stream()
.filter(str -> str.length() > 4)
.collect(Collectors.toList());
這個代碼段使用了lambda表達式來篩選長度大於4的字元串,並將結果收集到另一個List中。這比傳統的for循環要更加簡潔易懂。
二、避免空指針異常
Java 8中的Stream().filter還能夠幫助我們避免空指針異常。在傳統的for循環中,如果我們要檢查一個對象是否為空並進行過濾,我們需要先檢查對象是否為空,然後再判斷它是否符合條件。這樣的代碼看起來非常冗長:
List<String> list = Arrays.asList("apple", "banana", null, "date", "elderberry");
List<String> filteredList = new ArrayList<>();
for (String str : list) {
if (str != null && str.length() > 4) {
filteredList.add(str);
}
}
而使用Stream().filter,我們只需要在lambda表達式中判斷對象是否為空即可:
List<String> list = Arrays.asList("apple", "banana", null, "date", "elderberry");
List<String> filteredList = list.stream()
.filter(str -> str != null && str.length() > 4)
.collect(Collectors.toList());
這樣的代碼更加簡潔易懂,避免了冗長的空指針檢查。
三、提高代碼效率
Stream().filter還可以幫助我們提高代碼效率。在傳統的for循環中,我們需要手動在代碼中寫出循環和篩選的邏輯,代碼分散、難以理解。而使用Stream().filter,我們可以將這些邏輯放在一起,使代碼更加清晰簡潔。
例如,我們有一個List,需要找出其中所有薪水大於10000的員工。在傳統的for循環中,代碼可能如下:
List<Employee> list = Arrays.asList(new Employee("John", 20000), new Employee("Jane", 5000), new Employee("Jerry", 15000));
List<Employee> filteredList = new ArrayList<>();
for (Employee e : list) {
if (e.getSalary() > 10000) {
filteredList.add(e);
}
}
而使用Stream().filter,代碼如下:
List<Employee> list = Arrays.asList(new Employee("John", 20000), new Employee("Jane", 5000), new Employee("Jerry", 15000));
List<Employee> filteredList = list.stream()
.filter(e -> e.getSalary() > 10000)
.collect(Collectors.toList());
可以看到,使用Stream().filter可以使代碼更加簡潔,同時也避免了手動編寫循環和篩選邏輯這一錯誤的可能。
四、結語
本文詳細闡述了Stream().filter的用法和優勢,從對數據的篩選、避免空指針異常以及提高代碼效率三個方面進行了詳細的解釋。Stream API是Java 8中非常重要的一個新特性,值得我們廣泛使用和學習。
完整代碼示例
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 篩選數據
List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
List<String> filteredList = list.stream()
.filter(str -> str.length() > 4)
.collect(Collectors.toList());
System.out.println(filteredList);
// 避免空指針異常
List<String> list2 = Arrays.asList("apple", "banana", null, "date", "elderberry");
List<String> filteredList2 = list2.stream()
.filter(str -> str != null && str.length() > 4)
.collect(Collectors.toList());
System.out.println(filteredList2);
// 提高代碼效率
List<Employee> list3 = Arrays.asList(new Employee("John", 20000), new Employee("Jane", 5000), new Employee("Jerry", 15000));
List<Employee> filteredList3 = list3.stream()
.filter(e -> e.getSalary() > 10000)
.collect(Collectors.toList());
System.out.println(filteredList3);
}
static class Employee {
private String name;
private int salary;
public Employee(String name, int salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public int getSalary() {
return salary;
}
@Override
public String toString() {
return "Employee{name='" + name + '\'' + ", salary=" + salary + '}';
}
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/239659.html