Java Stream流获取与常用操作

12 下载量 85 浏览量 更新于2024-08-29 收藏 51KB PDF 举报
本文主要介绍了Java中的Stream流及其常用方法,包括如何获取Stream流、以及对foreach循环的使用。 在Java 8引入的Stream API是一种处理数据的新方式,它允许我们以声明性的方式处理集合数据。Stream API可以方便地进行过滤、映射、归约等操作,特别适合于并行计算。 1. 获取Stream流 - 所有实现了Collection接口的集合类(如ArrayList、LinkedList、HashSet等)都提供了`stream()`方法,可以直接将集合转换为Stream流。例如: ```java ArrayList<String> list = new ArrayList<>(); Stream<String> stream = list.stream(); ``` - Stream类提供了两个静态工厂方法:`of(T... t)` 和 `of(T t)`,用于创建特定类型的Stream。例如: ```java Stream<String> stringStream = Stream.of("灵台方寸山", "斜月三星洞"); String[] arr = {"为天地立心", "为生民立命", "为往圣继绝学", "为万世开太平"}; Stream<String> arrStream = Stream.of(arr); ``` - 对于Map,可以获取其键的Set(`keySet().stream()`)、值的Collection(`values().stream()`)或者Entry Set(`entrySet().stream()`)的Stream流。 2. foreach循环 Stream API提供了一个`forEach(Consumer<T> action)`方法,用于遍历Stream中的每个元素并执行一个操作。例如: ```java stream.forEach(System.out::println); ``` 这个例子中,`System.out::println`是一个方法引用,相当于传递了一个Consumer,用来消费Stream中的每个元素。 3. 其他常用方法 - `filter(Predicate<T> predicate)`:根据给定的条件过滤元素。 - `map(Function<T, R> mapper)`:将Stream中的每个元素应用一个函数,返回一个新的Stream。 - `distinct()`:移除重复的元素。 - `sorted()`:对Stream进行排序。 - `limit(long maxSize)`:限制Stream的大小,仅保留前maxSize个元素。 - `skip(long n)`:跳过前n个元素。 - `collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner)`:将Stream中的元素聚合到一个结果容器中,如列表、集合并等。 4. 并行流与并行计算 Stream API支持并行流(`parallelStream()`),可以利用多核处理器进行并行计算,提高处理效率。但需要注意,使用并行流时需考虑线程安全和数据一致性问题。 5. 终结操作 - `count()`:返回Stream中元素的数量。 - `findFirst()`:找到Stream中的第一个元素。 - `anyMatch(Predicate<T> predicate)`:检查是否存在满足条件的元素。 - `allMatch(Predicate<T> predicate)`:检查所有元素是否都满足条件。 - `noneMatch(Predicate<T> predicate)`:检查是否有元素不满足条件。 - `reduce(BinaryOperator<T> accumulator)`:对Stream中的元素进行归约操作,如求和、求最大值等。 通过这些方法,Stream API为我们提供了强大的数据处理能力,使得Java程序员能够更加优雅地处理数据,特别是在大数据和并行计算的场景下。了解并熟练掌握这些方法,能显著提升代码的可读性和效率。
2024-12-21 上传