Java8——Stream流

本文详细介绍了Java8的Stream流,包括获取Stream的四种方式、中间操作如筛选、映射和排序,以及终止操作如查找与匹配、规约和收集。讲解了如何使用filter、limit、skip、distinct、map、flatMap、sorted等方法,并提到了Optional类的使用。
摘要由CSDN通过智能技术生成

Java8——Stream流

Stream是数据渠道,用于操作集合、数组等生成的元素序列。

Stream操作的三个步骤:

  • 创建Stream
  • 中间操作
  • 终止操作

一、获取stream的四种方式

1.通过collection系列集合的stream()或parallelStream()获取。

@Test
void test11(){
    List<String> list = new ArrayList<>();
    Stream<String> stringStream = list.stream();
}

2.通过Arrays中的静态方法stream()获取数组流。

@Test
void test11(){
    Person[] person = new Person[10];
    Arrays.stream(person);
}

3.通过Stream中的静态方法of()。

@Test
void test11(){
    Stream<String> stream = Stream.of("a", "b", "c");
}

4.创建无限流

/**
 * 迭代
 */
@Test
void test11(){
    Stream<Integer> integerStream = Stream.iterate(0, x -> x + 2);
}
/**
 * 生成
 */
@Test
void test11(){
    Stream.generate(() -> Math.random());
}

二、中间操作

中间操作不会执行任何操作,只有终止操作才会一次性输出全部值,即“惰性求值”。
2.1 筛选与切片
filter——接收lamdba,从流中排除某些元素

@Test
void test12(){
    List<Person> personList = Arrays.asList(
        new Person("Java旅途",18),
        new Person("Java旅途",20)
    );
    // 中间操作
    Stream<Person> personStream = personList.stream()
        .filter(e -> e.getAge() > 18);
    // 终止操作
    personStream.forEach(System.out::println);
}

limit——截断流,使其元素不超过给定数量

@Test
void test12(){
    
    List<Person> personList = Arrays.asList(
        new Person("Java旅途",18),
        new Pers
Java 8中新增的Stream是一种处理集合的优雅姿势。 Stream是对集合(Collection)对象功能的增强,它能以一种声明的方式来处理数据,实现类似于SQL语句的操作。Stream不会改变原有的数据结构,它会生成一个新的Stream,同时支持并行化操作。 Stream的核心思想是将数据看作是,而上可以进行各种操作,比如过滤、排序、映射等。这样可以将数据处理过程变得非常简洁和灵活。 下面是一些Stream的常用操作: 1. filter:过滤符合条件的元素 ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); list.stream().filter(i -> i % 2 == 0).forEach(System.out::println); //输出2, 4 ``` 2. map:将元素转换成另一种类型 ``` List<String> list = Arrays.asList("apple", "banana", "orange"); list.stream().map(s -> s.toUpperCase()).forEach(System.out::println); //输出APPLE, BANANA, ORANGE ``` 3. sorted:对元素进行排序 ``` List<Integer> list = Arrays.asList(5, 2, 1, 4, 3); list.stream().sorted().forEach(System.out::println); //输出1, 2, 3, 4, 5 ``` 4. distinct:去重 ``` List<Integer> list = Arrays.asList(1, 2, 3, 2, 1); list.stream().distinct().forEach(System.out::println); //输出1, 2, 3 ``` 5. limit:限制元素个数 ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); list.stream().limit(3).forEach(System.out::println); //输出1, 2, 3 ``` 6. skip:跳过元素 ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); list.stream().skip(2).forEach(System.out::println); //输出3, 4, 5 ``` 7. reduce:对元素进行聚合操作 ``` List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); int sum = list.stream().reduce(0, (a, b) -> a + b); System.out.println(sum); //输出15 ``` Stream的操作可以组合起来形成一个水线,每个操作都会返回一个新的Stream对象,这样就可以形成一个操作序列。最后调用终止操作(如forEach、findAny等)才会触发所有中间操作的执行。 使用Stream处理集合的代码通常比使用传统的循环更简洁,同时也更易于并行化处理,提高了程序的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值