Java 8 特性:Stream API 的常见用法

StreamAPI是Java8引入的新特性,提供了一种简洁的处理集合和数组的方式,支持过滤、排序、分组和聚合等操作。其特点包括惰性求值、并行处理和链式调用,能显著提高代码可读性和执行效率。例如,可以使用StreamAPI对列表进行过滤和求和操作,或对Map集合计算平均值。
摘要由CSDN通过智能技术生成

Java 8引入了一个新特性——Stream API,它是一种面向集合(Collection)和数组(Array)等数据源的高级抽象,可以用一种类似于SQL语句的方式来对这些数据进行操作和处理。

使用Stream API可以实现一些常见的数据处理需求,比如筛选、排序、分组、聚合等,而且代码比传统的命令式方式更简洁、易读、易维护。

Stream API的核心思想:

  1. 将数据源进行转换(转换成一个Stream流)。
  2. 对Stream流进行各种操作(如map, filter, reduce等),将结果输出到一个容器中或者直接输出到终端。

Stream API具有以下优点:

  1. 代码简洁:通过链式编程语法可以实现复杂的数据处理逻辑。
  2. 减少内存占用:Stream是一种惰性求值方式,即在一定时机才进行计算,可以大大减少内存占用。
  3. 并行处理:Stream可以通过并行处理提高数据处理速度。

以下是一个使用Stream API进行数据处理的例子:

List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

int sum = nums.stream()
              .filter(n -> n % 2 == 0)
              .mapToInt(n -> n)
              .sum();

System.out.println(sum);

该示例中,我们首先将整数列表转换为一个Stream流,然后使用filter方法筛选出偶数,使用mapToInt方法将结果转换为int类型,最后使用sum方法求和。该代码简洁易读,同时利用了Stream API的惰性求值和并行处理的特点,实现了高效的数据处理。

常见用法代码样例

以下是一些常见的Stream API用法示例:

1. 对Collection集合进行过滤

List<String> fruits = Arrays.asList("banana", "apple", "orange", "grape", "watermelon");

List<String> filteredFruits = fruits
        .stream()
        .filter(fruit -> fruit.startsWith("b"))
        .collect(Collectors.toList());

System.out.println(filteredFruits);

该代码中,我们首先将一个字符串列表转换成一个Stream流,然后使用filter方法过滤出所有以字母b开头的字符串,最后使用collect方法将过滤后的结果收集到一个List列表中。输出结果为[banana]

2. 对数组进行操作

int[] numbers = {1, 2, 3, 4, 5};

int sum = Arrays.stream(numbers)
        .filter(n -> n % 2 == 0)
        .sum();

System.out.println(sum);

该代码将一个整数数组转换成一个IntStream流,使用filter方法过滤出所有偶数,然后使用sum方法计算和,输出结果为6

3. 对Map集合进行操作

Map<String, Integer> scores = new HashMap<>();
scores.put("John", 80);
scores.put("Mike", 70);
scores.put("Jenny", 90);
scores.put("Andy", 85);

int avgScore = scores
        .values() // 获取得分列表
        .stream()
        .mapToInt(Integer::intValue)
        .average() // 求平均分
        .orElse(0);

System.out.println(avgScore);

该代码中,我们将一个Map集合转换成一个IntStream流,并使用mapToInt方法将流中的值转换为int类型。然后使用average方法求平均分,输出结果为81

4. 对对象列表进行操作

假设有一个Person类,包含了nameage两个属性。我们现在要对一个Person对象列表进行操作:

List<Person> persons = Arrays.asList(
        new Person("Alice", 23),
        new Person("Bob", 25),
        new Person("Charlie", 18),
        new Person("Dave", 29)
);

List<String> names = persons
        .stream()
        .filter(p -> p.getAge() >= 25)
        .map(Person::getName)
        .collect(Collectors.toList());

System.out.println(names);

该代码首先将一个Person对象列表转换成一个Stream流,然后使用filter方法过滤出所有年龄大于等于25的人,使用map方法将结果转换为对应的姓名,最后使用collect方法将结果收集到一个List列表中。输出结果为[Bob, Dave]

以上仅是几个常见的Stream API用法示例,实际上还有许多其他功能和操作,具体可以参考Java官方文档。

最后,给大家分享一份Java 项目源码,祝愿大家钱途无量!
【sprinboot+MySQL】网上书城管理系统(含论文和PPT)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值