Java8 的 Stream使用详细讲解(面试和实战可用)

本文详细介绍了Java8中的Stream API,强调其作为数据处理工具的高效性和便捷性。内容涵盖Stream的基本概念、特点,以及常用方法如map、distinct、filter、limit、sorted、求和、查找最大最小值、skip、分组和List转Map的操作。通过实例展示了Stream如何用于数据过滤、排序、去重和转换,同时提到了潜在的冲突解决策略和规约操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Java 8 API出现了一个新的特性称为流Stream,Stream简单来说可以用于对集合的数据做非常复杂的查找、排序、筛选过滤和映射数据等操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

Stream的特点:

  • Stream 不是集合元素,它不是数据结构并不保存数据.它更像一个高级版本的 Iterator。只能显式地一个一个遍历元素并对其执行某些操作.
  • Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次.

Stream接口中定义了几个常用的转换方法

  1. map: 对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素。

比如,取出对象集合中的姓名,并生成List集合( 抽取内容生成集合),代码如下:

List.add(new Person(String name, Integer age, Integer address,sex));

// 初始化数据
personList.add(new Person("李五", 18, 北京, 1));
personList.add(new Person("赵钱", 20, 上海, 1));
personList.add(new Person("孙航", 16, 海南, 2));
personList.add(new Person("王五", 32, 海南), 1);
personList.add(new Person("徐七", 19, 西安), 2);

private static void demo() {
   
    List<String> name = List.stream().map(Person::getName).collect(Collectors.toList());
    name.forEach(name ->{
   
        System.out.println(name);
    });
}

运行结果:

李五
赵钱
孙航
王五
徐七
  1. distinct: 对于Stream中包含的元素进行去重操作(去重逻辑通过流中元素的 hashCode() 和 equals() 去除重复元素),新生成的Stream中没有重复的元素;

具体代码实现:

private static void testFilter() {
   
   list.stream().filter(person -> person.getSex() == 1).forEach(person -> {
   
        System.out.println("男生 ->" + person.toString());
    });
}

运行结果:

Person{
   name="李五, age
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值