Java Stream流的常见生成和操作方法总结

Java Stream流的常见生成和操作方法总结

生成Stream流的常见方式

1. 通过Collection接口生成

可以通过Collection接口提供的stream()和parallelStream()方法生成一个Stream或ParallelStream流:

List<String> list = Arrays.asList("apple", "banana", "orange");
Stream<String> stream = list.stream(); // 生成Stream流
Stream<String> parallelStream = list.parallelStream(); // 生成ParallelStream流

2. 通过数组生成

可以通过数组的静态方法Arrays.stream()生成一个Stream流:

int[] arr = {1, 2, 3, 4, 5};
IntStream stream = Arrays.stream(arr); // 生成IntStream流

3. 通过指定数据方式生成

可以通过静态方法Stream.of()和Arrays.stream()生成一个Stream流:

Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5); // 生成Stream流
Stream<Integer> stream2 = Arrays.stream(new Integer[]{1, 2, 3, 4, 5}); // 生成Stream流

4. 通过生成函数方式生成

可以通过静态方法Stream.generate()和Stream.iterate()生成一个Stream流:

Stream<Integer> stream1 = Stream.generate(() -> new Random().nextInt(100)); // 生成无限个随机数的Stream流
Stream<Integer> stream2 = Stream.iterate(0, n -> n + 2).limit(5); // 生成0, 2, 4, 6, 8的Stream流

Stream流的常用操作

1. filter()方法

filter()方法使用一个Lambda表达式作为参数,筛选出符合条件的元素:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
Stream<Integer> result = stream.filter(i -> i % 2 == 0);
result.forEach(System.out::println); // 输出:2, 4

2. map()方法

map()方法使用一个Lambda表达式作为参数,将元素映射为一个新的元素:

List<String> list = Arrays.asList("apple", "banana", "orange");
Stream<String> stream = list.stream();
Stream<String> result = stream.map(s -> s.toUpperCase());
result.forEach(System.out::println); // 输出:APPLE, BANANA, ORANGE

3. distinct()方法

distinct()方法返回一个没有重复元素的Stream流:

List<String> list = Arrays.asList("apple", "banana", "orange", "apple");
Stream<String> stream = list.stream();
Stream<String> result = stream.distinct();
result.forEach(System.out::println); // 输出:apple, banana, orange

4. sorted()方法

sorted()方法将流中的元素按照自然顺序或者指定的Comparator排序:

List<Integer> list = Arrays.asList(3, 5, 1, 4, 2);
Stream<Integer> stream = list.stream();
Stream<Integer> result = stream.sorted();
result.forEach(System.out::println); // 输出:1, 2, 3, 4, 5

5. limit()方法和skip()方法

limit()方法返回一个由原Stream包含的前n个元素组成的新Stream;skip()方法返回一个并不包含原Stream的前n个元素的新Stream:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
Stream<Integer> result1 = stream.limit(3);
result1.forEach(System.out::println); // 输出:1, 2, 3

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
Stream<Integer> result2 = stream.skip(2);
result2.forEach(System.out::println); // 输出:3, 4, 5

6. reduce()方法

reduce()方法可以将流中的元素依次归约,返回结果:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
Optional<Integer> result = stream.reduce((a, b) -> a + b);
System.out.println(result.get()); // 输出15

示例说明

示例1:使用Stream流的常见生成和操作

下面程序使用生成函数的方式生成Stream流, 对其中的偶数进行过滤(filter)和排序(sorted)操作, 最后输出结果:

import java.util.Random;
import java.util.stream.Stream;

public class StreamDemo {

    public static void main(String[] args) {
        Stream<Integer> stream = Stream.generate(() -> new Random().nextInt(100)).limit(10);
        Stream<Integer> result = stream.filter(i -> i % 2 == 0).sorted();
        result.forEach(System.out::println); // 输出:6, 16, 18, 26, 30, 56, 68, 84, 88, 92
    }
}

示例2:从文件中读取单词进行统计

下面示例读取指定文件(book.txt)中的单词, 对其进行统计后输出结果:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDemo {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("D:/book.txt"));
        Stream<String> words = br.lines().flatMap(line -> Arrays.stream(line.split("\\W+"))).filter(word -> word.length() > 0);
        Map<String, Long> freq = words.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting()));
        System.out.println(freq);
    }
}

程序将单词进行toLowerCase()操作, 统计其出现的数量并输出结果.

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Stream流的常见生成和操作方法总结 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Spring依赖注入与第三方Bean管理基础详解

    Spring依赖注入与第三方Bean管理基础详解 Spring是一个企业级应用开发框架,它能够帮助开发者做到松耦合、便于测试和灵活性高的设计。其中的依赖注入和第三方Bean管理是Spring最为重要的两个特性之一,也是开发者需要掌握的基础知识。 什么是依赖注入? 依赖注入(DI,Dependency Injection)是指Spring容器将一个Bean的依…

    Java 2023年5月19日
    00
  • jquery ajax 局部刷新小案例

    首先,让我们了解一下jQuery的ajax方法,该方法允许我们通过JavaScript代码向服务器发送异步HTTP请求,并在服务器响应事件时更新部分页面内容,使得页面刷新更快,用户体验更加顺畅。 接下来,我们将介绍一个jquery ajax的小案例,以帮助您更好地理解如何使用jQuery和ajax来实现局部刷新。 一、案例需求 我们的网站有一个评论区,用户可…

    Java 2023年6月15日
    00
  • JAVA实现简单停车场系统代码

    下面是实现简单停车场系统代码的攻略。 1. 简介 这是一个基于Java语言实现的停车场系统,主要功能包括车辆进出场、计算停车费用等。 2. 实现步骤 2.1 创建车辆类 首先,在Java中创建一个车辆类,包含车牌号、进场时间和出场时间等属性,以及进场和出场方法,用于记录车辆的进出时间。 示例代码: public class Car { private Str…

    Java 2023年5月19日
    00
  • java web中对json的使用详解

    Java Web中对JSON的使用详解 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用中的前后端数据传输。JSON格式数据本质上是一个JavaScript对象,采用键值对的方式存储数据。 JSON与Java的关系 Java中有许多开源的JSON库,如Jackson、Gson、Fa…

    Java 2023年5月26日
    00
  • 什么是同步?

    以下是关于同步的完整使用攻略: 什么是同步? 同步是指多个线程之间按照一定的顺序执行,以避免出现数据竞争和不一致的情况。在多线程编程中,同步是非常重要的,因为多个线程同时访问共享资源时,可能会导致数据的不一致性和程序的错误。 同步的实现方式 同步可以通过以下几种方式来实现: synchronized关键字:synchronized关键字可以用来修饰方法或代码…

    Java 2023年5月12日
    00
  • struts2中常用constant命令配置方法

    在Struts2中,可以通过配置constant命令来设置全局常量,方便在整个应用程序中共用这些常量。以下是配置constant命令的方法及示例: 配置常量 在struts.xml中使用constant命令可以配置全局常量: <constant name="CONSTANT_NAME" value="CONSTANT_VA…

    Java 2023年5月20日
    00
  • vue 封装面包屑组件教程

    首先我们来介绍一下什么是面包屑(Breadcrumb)组件。面包屑组件是一种常用的导航方式,它能够让用户清楚地知道自己当前所处的位置以及所访问的路径。在前端框架中,Vue也提供了非常方便的封装方式来实现面包屑组件。 接下来,我们将按照以下步骤进行Vue面包屑组件的封装: 1. 创建面包屑组件 首先,在Vue项目中创建一个面包屑组件,它的基本结构如下: &lt…

    Java 2023年5月20日
    00
  • Maven  pom.xml与settings.xml详解

    Maven pom.xml与settings.xml详解 1. pom.xml 1.1 意义 pom.xml 是 Maven 项目的 XML 形式的配置文件。它存储关于项目的信息,例如它的依赖项,它编译时的类路径,构建插件及其配置,开发者列表,许可证等。 1.2 样例配置 下面是一个标准的pom.xml的例子: <project xmlns=&quot…

    Java 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部