上一篇博客中初步讲述了Stream的特性,现在我们就用各种例子来体验下Stream的魅力。
1.过滤一个整数列表,只保留偶数:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evenNumbers); // 输出 [2, 4, 6, 8]
2.将一个字符串列表转换为大写:
List<String> strings = Arrays.asList("java", "python", "ruby", "c++");
List<String> upperStrings = strings.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperStrings); // 输出 ["JAVA", "PYTHON", "RUBY", "C++"]
3.计算一个整数列表中所有元素的总和:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.reduce(0, Integer::sum);
System.out.println(sum); // 输出 15
4.从一个包含多个字符串的列表中提取所有长度超过5的字符串:
List<String> strings = Arrays.asList("apple", "banana", "cherry", "date");
List<String> longStrings = strings.stream()
.filter(s -> s.length() > 5)
.collect(Collectors.toList());
System.out.println(longStrings); // 输出 ["banana"]
5.使用peek方法查看Stream中的元素,但不改变它们:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.peek(n -> System.out.println("Processing: " + n))
.forEach(n -> System.out.println("Output: " + n));
// 输出:
// Processing: 1
// Output: 1
// Processing: 2
// Output: 2
// ...以此类推
6.使用Stream进行文件读取和处理:
假设你有一个文本文件,其中包含多行文本,每行文本都是一个单词。你可以使用Stream API读取文件,并将所有单词转换为大写。
try (Stream<String> stream = Files.lines(Paths.get("words.txt"))) {
List<String> upperWords = stream.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperWords); // 输出转换为大写的单词列表
} catch (IOException e) {
e.printStackTrace();
}