Java基础-JDK8之Stream特性

本文通过实战演示 Java 8 中的 Stream API 如何简化集合数据处理。包括 foreach 循环、filter 过滤、sorted 排序、字符串拼接、map 匹配操作等常见用法,并提供示例代码。

一、Stream 介绍

我们可以把Stream当成一个高级版本的Iterator。
原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;
高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,
比如“过滤掉长度大于10的字符串”、“获取每个字符串的首字母”等,
具体这些操作如何应用到每个元素上,就给Stream就好了!(摘抄自C_time

二、Demo

直接上demo理解吧,毕竟都是程序员,只有程序说的才是正确的

package com.stream;

import org.junit.Test;

import java.awt.image.AreaAveragingScaleFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @program: JDK8-java
 * @description: 测试Stream流基础特性
 * @author: hs
 * @create: 2020-11-10 21:16
 **/
public class TestStreamBase {

    /**
     * forEach 循环
     */
    @Test
    public void foreach(){
        List<String> list = new ArrayList<>();
        list.add("bb");
        list.add("aa");
        list.add("cc");
        list.stream().forEach(value -> {
            System.out.println(value);
        });
    }
    /**
     * filter 过滤
     */
    @Test
    public void filter(){
        List<String> list = new ArrayList<>();
        list.add("bb");
        list.add("aa");
        list.add("cc");
        list.stream().filter(value -> {
            return value.equals("aa");
        }).forEach(value -> {
            System.out.println(value);
        });
    }

    /**
     * sorted 排序
     */
    @Test
    public void sorted(){
        List<String> list = new ArrayList<>();
        list.add("bb");
        list.add("aa");
        list.add("cc");
        System.out.println("操作前list:");
        list.stream().forEach(value -> {
            System.out.print(value+"\t");
        });
        List<String> collect = list.stream().sorted((a,b) -> {
            return a.compareTo(b);
        }).collect(Collectors.toList());
        System.out.println();
        System.out.println("升序排序:"+collect);
        collect = list.stream().sorted((a, b) -> {
            return b.compareTo(a);
        }).collect(Collectors.toList());
        System.out.println("降序排序:"+collect);
    }
    /**
     * list集合返回拼接字符串
     */
    @Test
    public void joinString(){
        List<String> list = new ArrayList<>();
        list.add("bb");
        list.add("aa");
        list.add("cc");
        System.out.println("操作前list:"+list);
        String collect = list.stream().sorted((a, b) -> {
            return b.compareTo(a);
        }).collect(Collectors.joining(",","前","后"));
        System.out.println("操作后:"+collect);
    }
    /**
     * map 匹配操作元素
     */
    @Test
    public void map(){
        List<String> list = new ArrayList<>();
        list.add("bb");
        list.add("aa");
        list.add("cc");
        System.out.println("操作前list:"+list);
        List<String> collect = list.stream().map(value -> {
            if (value.equals("aa")){
                return "dd";
            }
            return value;
        }).collect(Collectors.toList());
        System.out.println("操作后:"+collect);
    }

    /**
     * flatMap 合并多个数组
     */
    @Test
    public void flatMap(){
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("cc");
        List<String> list1 = Arrays.asList("bb");
        System.out.println("操作前list:"+list+"\t"+"list1:"+list1);
        List<List> lists = Arrays.asList(list,list1);
        List<String> collect = (List<String>) lists.stream().flatMap(value -> value.stream()).collect(Collectors.toList());
        System.out.println("操作后:"+collect);
    }

    /**
     * reduce 折叠操作,可以对stream中所有的值进行操作
     */
    @Test
    public void reduce(){
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);
        Integer sum = list.stream().reduce((value,count) ->{
            System.out.println("value:"+value+",count:"+count);
           return value += count;
        }).get();
        System.out.println(sum);

        System.out.println("***************");
        // 字符串连接,concat = "ABCD"
        String concat = Stream.of("A", "B", "C", "D").reduce("", String::concat);
        // 求最小值,minValue = -3.0
        double minValue = Stream.of(-1.5, 1.0, -3.0, -2.0).reduce(Double.MAX_VALUE, Double::min);
        // 求和,sumValue = 10, 有起始值
        int sumValue = Stream.of(1, 2, 3, 4).reduce(0, Integer::sum);
        // 求和,sumValue = 10, 无起始值
        sumValue = Stream.of(1, 2, 3, 4).reduce(Integer::sum).get();
        // 过滤,字符串连接,concat = "ace"
        concat = Stream.of("a", "B", "c", "D", "e", "F").
                filter(x -> x.compareTo("Z") > 0).
                reduce("", String::concat);
    }

}

图省事直接复制过来了,其实在我理解中,Stream流就是对集合处理的一种升华,使我们处理集合数据更加便利。常见的Stream方法已经贴到上边了,相信不难看懂,更多方法直接查看API文档即可,不过其实这里更多是要实践,我了解这方面的内容也只是想能读懂代码,更深入需要在项目中实践了。

参考博客

  1. jdk8-lambda表达式的使用
  2. Java基础之JDK8之Stream接口

个人JDK8新特性练习Demo,已上传至Github,感兴趣的同学可以查看!

至此,完结,撒花

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值