Java Stream流详解结合代码

Java Stream API是用于处理集合(例如List、Set等)中的元素的一种新方式。它引入了函数式编程的概念,使得操作集合变得更加简洁和高效。Stream API中的方法大致分为两类:中间操作(intermediate operations)和终端操作(terminal operations)。中间操作是惰性的,只有在执行终端操作时才会执行。

下面通过代码示例详细说明每个常见的Stream API方法。

1. 创建Stream

Stream可以通过集合、数组、或生成器等方式创建。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StreamExample {
    public static void main(String[] args) {
        // 从集合创建Stream
        List<String> list = Arrays.asList("a", "b", "c", "d");
        Stream<String> streamFromList = list.stream();

        // 从数组创建Stream
        String[] array = {"a", "b", "c", "d"};
        Stream<String> streamFromArray = Arrays.stream(array);

        // 使用Stream的静态方法创建
        Stream<String> stream = Stream.of("a", "b", "c", "d");
    }
}

2. 中间操作(Intermediate Operations)

中间操作会返回一个新的Stream,它们是惰性的。

map

map方法用于将当前流中的每个元素映射到另一个元素。

List<String> list = Arrays.asList("a", "b", "c", "d");
List<String> upperList = list.stream()
    .map(String::toUpperCase)
    .collect(Collectors.toList());
filter

filter方法用于筛选出符合条件的元素。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
    .filter(n -> n % 2 == 0)
    .collect(Collectors.toList());
sorted

sorted方法用于对流中的元素进行排序。

List<String> list = Arrays.asList("d", "a", "c", "b");
List<String> sortedList = list.stream()
    .sorted()
    .collect(Collectors.toList());
distinct

distinct方法用于去重流中的元素。

List<Integer> numbers = Arrays.asList(1, 2, 3, 2, 1, 4);
List<Integer> distinctNumbers = numbers.stream()
    .distinct()
    .collect(Collectors.toList());
limit

limit方法用于截断流,使其不超过给定数量。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> limitedNumbers = numbers.stream()
    .limit(3)
    .collect(Collectors.toList());
skip

skip方法用于跳过前n个元素。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> skippedNumbers = numbers.stream()
    .skip(2)
    .collect(Collectors.toList());

3. 终端操作(Terminal Operations)

终端操作会触发流的计算,返回一个结果或副作用。

collect

collect方法用于将流中的元素收集到一个集合或其他容器中。

List<String> list = Arrays.asList("a", "b", "c", "d");
List<String> collectedList = list.stream()
    .collect(Collectors.toList());
forEach

forEach方法用于遍历流中的每个元素并执行给定的操作。

List<String> list = Arrays.asList("a", "b", "c", "d");
list.stream().forEach(System.out::println);
reduce

reduce方法用于将流中的元素结合起来。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
    .reduce(0, Integer::sum);
count

count方法用于返回流中元素的数量。

List<String> list = Arrays.asList("a", "b", "c", "d");
long count = list.stream().count();
anyMatch, allMatch, noneMatch

这些方法用于判断流中的元素是否匹配给定的条件。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
boolean anyEven = numbers.stream().anyMatch(n -> n % 2 == 0);
boolean allEven = numbers.stream().allMatch(n -> n % 2 == 0);
boolean noneEven = numbers.stream().noneMatch(n -> n % 2 != 0);

通过这些方法,Java Stream API提供了一种简洁而强大的方式来处理集合中的数据。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟主教

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值