关键词

Java Stream API 使代码更出色的操作完全攻略

Java Stream API 使代码更出色的操作完全攻略

Java Stream API 是一个用于处理集合的 API,它允许以声明性方式处理数据。使用流,我们可以过滤、转换、聚合和排序数据,而无需编写大量的循环和条件语句。本文将教你如何使用 Java Stream API 让你的代码更加简洁和易于理解。

创建流

使用 Java Stream API,我们可以从集合、数组、文件等各种数据源创建一个流。我们可以使用 Stream 类的静态方法来创建一个流。以下是一些示例:

从集合创建流

// 从 List 创建流
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = numbers.stream();

// 从 Set 创建流
Set<String> names = new HashSet<>();
names.add("Alice"); 
names.add("Bob");
names.add("Charlie");
Stream<String> stream = names.stream();

从数组创建流

// 从 int 数组创建流
int[] intArray = {1, 2, 3, 4};
IntStream stream = Arrays.stream(intArray);

// 从 String 数组创建流
String[] stringArray = {"apple", "orange", "banana"};
Stream<String> stream = Arrays.stream(stringArray);

从文件创建流

try {
    // 从文件创建流
    Stream<String> stream = Files.lines(Paths.get("data.txt"));
} catch (IOException e) {
    e.printStackTrace();
}

中间操作

Java Stream API 中间操作可以在流的元素上进行处理操作,但不返回数据。下面是一些常用的中间操作:

filter

筛选元素,只保留符合条件的元素。

Stream<String> stream = Arrays.stream(stringArray);
Stream<String> filteredStream = stream.filter(s -> s.length() > 5);
filteredStream.forEach(System.out::println);
输出结果: orange banana

map

将元素转换为另外一个元素。

Stream<String> stream = Arrays.stream(stringArray);
Stream<Integer> lengthStream = stream.map(String::length);
lengthStream.forEach(System.out::println);
输出结果: 5 6 6

sorted

对元素进行排序操作。

Stream<String> stream = Arrays.stream(stringArray);
Stream<String> sortedStream = stream.sorted();
sortedStream.forEach(System.out::println);
输出结果: apple banana orange

终端操作

终端操作是在流上执行最终操作的操作。终端操作可能生成结果或副作用。当调用结束操作时,流将被关闭。以下是一些常用的终端操作:

forEach

迭代并打印流中的元素。

Stream<String> stream = Arrays.stream(stringArray);
stream.forEach(System.out::println);
输出结果: apple orange banana

collect

转换流中的元素,并将其收集到集合中。

Stream<String> stream = Arrays.stream(stringArray);
List<String> list = stream.collect(Collectors.toList());

count

返回流中的元素数。

Stream<String> stream = Arrays.stream(stringArray);
long count = stream.count();
System.out.println(count);
输出结果: 3

总结

这是一些常见的流操作,你可以根据自己的需要选择不同的操作来处理流。使用 Java Stream API,可以将代码变得更加简洁和易于理解。

示例一

以下是一个使用 Stream API 和 Lambda 表达式,实现计算列表中所有奇数的平方和。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream()
              .filter(i -> i % 2 != 0)  // 过滤奇数元素
              .mapToInt(i -> i * i)     // 平方每个元素
              .sum();                   // 对所有元素求和
System.out.println(sum);  // 输出结果:35

示例二

以下是一个使用 Stream API 和 Lambda 表达式,筛选某个目录下的所有文件名以 ".txt" 结尾的文件名。

try {
    Stream<Path> stream = Files.list(Paths.get("C:/data"));
    stream.filter(Files::isRegularFile)
          .filter(p -> p.toString().endsWith(".txt"))
          .forEach(System.out::println);
} catch (IOException e) {
    e.printStackTrace();
}

本文链接:http://task.lmcjl.com/news/13051.html

展开阅读全文