Java流(Stream)是一種用于處理數據集合的高級抽象,它允許你以聲明式的方式處理數據。要正確使用Java流,請遵循以下步驟:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
使用流操作:
過濾:根據條件篩選元素。
List<String> filteredNames = names.stream()
.filter(name -> name.length() > 3)
.collect(Collectors.toList());
System.out.println(filteredNames); // 輸出: [Alice, Charlie, David]
映射:將每個元素轉換為另一種類型。
List<Integer> lengths = names.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println(lengths); // 輸出: [5, 3, 7, 5]
排序:對元素進行排序。
List<String> sortedNames = names.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedNames); // 輸出: [Alice, Bob, Charlie, David]
并行流:使用多個線程處理數據,以提高性能。
long startTime = System.currentTimeMillis();
List<Integer> parallelLengths = names.parallelStream()
.mapToInt(String::length)
.collect(Collectors.toList());
long endTime = System.currentTimeMillis();
System.out.println(parallelLengths); // 輸出: [5, 3, 7, 5]
System.out.println("Time taken: " + (endTime - startTime) + " ms");
歸約:將流中的元素組合成一個值。
int sumOfLengths = names.stream()
.mapToInt(String::length)
.sum();
System.out.println(sumOfLengths); // 輸出: 20
查找:根據條件查找元素。
Optional<String> firstLongName = names.stream()
.filter(name -> name.length() > 5)
.findFirst();
System.out.println(firstLongName.orElse("No long name found")); // 輸出: Charlie
使用終端操作:
forEach:對每個元素執行操作。
names.stream()
.forEach(name -> System.out.println("Hello, " + name));
toArray:將流中的元素收集到一個數組中。
String[] nameArray = names.stream()
.toArray(String[]::new);
System.out.println(Arrays.toString(nameArray)); // 輸出: [Alice, Bob, Charlie, David]
reduce:將流中的元素組合成一個值。
int maxLength = names.stream()
.mapToInt(String::length)
.reduce(0, Integer::max);
System.out.println(maxLength); // 輸出: 7
collect:將流中的元素收集到集合中。
List<String> lowerCaseNames = names.stream()
.map(String::toLowerCase)
.collect(Collectors.toList());
System.out.println(lowerCaseNames); // 輸出: [alice, bob, charlie, david]
通過遵循這些步驟,你可以正確地使用Java流來處理數據集合。請注意,流操作是惰性求值的,這意味著只有在執行終端操作時才會實際處理數據。這有助于提高性能,特別是在處理大型數據集時。