一文带你掌握Java8强大的StreamAPI

一文带你掌握Java8强大的StreamAPI - 完整攻略

什么是StreamAPI?

Java 8引入了Stream API,这是一种处理数据流的新方式,通过Stream API可以执行流式处理,在Java 8之前,我们处理集合需要使用for循环或者迭代器等方式,而这些处理方式会让代码变得复杂难懂,使用Stream API,我们可以更加简洁高效的处理数据流。

Stream API的主要特点如下:
- 流式处理,可以对数据流进行转换、筛选等操作。
- 延迟执行,只有在需要获取结果时才会进行计算,可以减少不必要的计算。
- 并行处理,可以使用多线程进行并行计算,提高处理速度。

Stream API常用方法

创建Stream

Java 8中的集合类都添加了两个方法:Stream和parallelStream,用于生成一个普通流或者并行流。

List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();  //获取普通流
Stream<String> parallelStream = list.parallelStream(); //获取并行流

筛选和切片

  • filter:通过过滤得到符合条件的元素。
  • limit:截断流,使其元素不超过给定数量。
  • skip:跳过指定数量的元素。
  • distinct:去重。
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//获取偶数
List<Integer> evens = list.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());

//获取前三个偶数
List<Integer> first3Evens = list.stream().filter(n -> n % 2 == 0).limit(3).collect(Collectors.toList());

//获取跳过前两个元素的流并去重
Stream<Integer> distinctStream = list.stream().skip(2).distinct();

映射

  • map:将流中的每一个元素都进行一定的操作后转换成另一个元素。
  • flatMap:扁平化处理,将多个流合并成一个流。
List<String> words = Arrays.asList("hello", "world");
//获取每个单词的长度,并转化为List类型
List<Integer> wordLengths = words.stream().map(String::length).collect(Collectors.toList());

List<String> list1 = Arrays.asList("hello", "world");
List<String> list2 = Arrays.asList("java", "stream");
//将两个list合并成一个新的list
List<String> mergedList = Stream.of(list1, list2).flatMap(Collection::stream).collect(Collectors.toList());

归约

  • reduce:将流中的元素反复结合得到一个值。
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//获取所有元素的和
int sum = list.stream().reduce(0, Integer::sum);

示例1 - 求出单词长度小于5的单词数

List<String> words = Arrays.asList("hello", "world", "java", "stream", "lambda", "was", "is");
//求出单词长度小于5的单词数
long count = words.stream()
                  .filter(s -> s.length() < 5)
                  .count();

示例2 - 获取每个人年龄最大的用户

class User {
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //getter、setter方法
}

List<User> userList = Arrays.asList(new User("Tom", 25),
                                     new User("Jack", 26),
                                     new User("Lucy", 27),
                                     new User("Lily", 23),
                                     new User("David", 28));
//获取每个人年龄最大的用户
Map<String, Integer> nameAndAgeMap = userList
                                    .stream()
                                    .collect(Collectors.toMap(User::getName, User::getAge, Integer::max));

以上就是Java8 StreamAPI的完整攻略,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文带你掌握Java8强大的StreamAPI - Python技术站

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

相关文章

  • Ubuntu Mysql 5.7 datadir 数据目录的修改

    今天要修改一下Ubuntu下mysql 5.7 的数据目录,发现无论怎么折腾文件 /etc/mysql/my.cnf   重启后都无效,在网上查看的相关的文档,说是要修改apparmor的文件,借此整理了一下文档,将步骤写到下面。 系统的的版本信息: dc@dc-virtual-machine:~$ uname -a Linux dc-virtual-mac…

    MySQL 2023年4月16日
    00
  • webshell权限提升技巧

    为了完整讲解“webshell权限提升技巧”的攻略,我将整个过程分成以下几个步骤: 查看当前webshell权限:在初步进入网站后,我们通常只能拿到webshell权限,通过以下命令来查看当前权限: id && uname -a 其中,id命令用来查看当前用户和其属于的用户组,uname命令用来查看操作系统和内核版本信息。 获取更高的权限:接…

    database 2023年5月21日
    00
  • Linux启动/停止/重启Mysql数据库的简单方法(推荐)

    下面是详细的攻略。 Linux启动/停止/重启Mysql数据库的简单方法 Mysql是一款非常流行的关系型数据库,Linux用户经常会使用这个数据库。在Linux中,启动/停止/重启Mysql可以使用systemd(系统守护进程)管理命令来实现。下面我们将分别介绍如何使用systemd启动/停止/重启Mysql。 1. 启动Mysql 在Linux中,启动M…

    database 2023年5月22日
    00
  • RedHat Linux5.5下Oracle 11g安装图解教程

    RedHat Linux 5.5 下 Oracle 11g 安装图解教程 1. 前置条件 在安装 Oracle 11g 之前,请确保系统满足以下要求: 系统版本为 RedHat Linux 5.5; 机器的 CPU 架构为 x86_64; 系统内核版本为 2.6.18-194.el5; 系统硬件配置至少为 1GB 内存和 3GB 磁盘空间。 2. 下载 Or…

    database 2023年5月22日
    00
  • SQL之Join的使用详解

    SQL之Join的使用详解 Join是SQL查询中重要的操作之一,它是将多个表中的数据进行联接,生成新的关系表,及时获取多个表中对应的数据。下面我们详细介绍Join的使用方法。 Join简介 Join的作用是基于两个表之间的关系,将它们的信息合并到一个表中。我们可以通过Join来实现从一个表中查询有关联的信息的效果。 常用的Join类型有:内连接(Inner…

    database 2023年5月18日
    00
  • SpringBoot+redis+activemq秒杀场景简单整理

    目前设想的大致的序列图 秒杀开始前,初始化数据库秒杀信息,并同步到redis缓存中,秒杀开始后,用户直接访问redis缓存进行库存扣减,当剩余库存小于0时说明商品抢购完毕,直接返回库存不足抢购失败,抢购成功的用户返回“秒杀成功,订单处理中,请稍后查看”,并且成功的抢购信息进入队列,异步扣减数据库实际库存并下单。用户查询订单,根据用户和商品查询对应的订单信息返…

    Redis 2023年4月13日
    00
  • CentOS8下安装oracle客户端完整(填坑)过程分享(推荐)

    CentOS 8下安装Oracle客户端完整过程分享(填坑)攻略 简介 如果你已经通过yum命令安装了Oracle所需的依赖,并且选择了基本的安装模式,你会发现仍然不能成功连接到Oracle数据库。这是因为Oracle客户端并没有在环境变量中添加相应的路径,因此需要进行手动配置。接下来,我们将详细介绍如何在CentOS 8中安装并配置Oracle客户端以便成…

    database 2023年5月22日
    00
  • access mysql mssql 随机 10条数据的sql语句 原创

    如果您想从MySQL和SQL Server的表中随机获取10条记录,可以使用以下SQL语句: MySQL SELECT * FROM `table_name` ORDER BY RAND() LIMIT 10; SQL Server SELECT TOP 10 * FROM `table_name` ORDER BY NEWID(); 以上两个示例中,tab…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部