Stream流初体验

23 篇文章 0 订阅

函数式编程:Stream流
思想:就是创造一条可以对数据进行过滤,筛选等操作的流水线
获取方法 --> 中间方法(逻辑代码) --> 终结方法(每个Stream流只能有一个终结方法)
Stream流可以分为三类方法:
在这里插入图片描述
获取方法:

1,单列集合:可以使用Collection接口中的默认方法 stream();生成流。

方法:default Stream stream()

2,双列集合:间接生成流
可以通过KeySet或者entrySet获取一个Set集合,再获取Stream流

3,数组:通过Arrays类 中的静态方法 stream(); 生成流

4,同种数据类型的多个数据:使用 Stream.of(T…values);生成流

如:1,2,3,4,5… 。 “aaa”,“bbb”,“ccc”…

在这里插入图片描述
Stream流 中间操作常用方法

Stream filter(Predicate predicate); 用于对流中的数据进行过滤

Predicate接口中的方法: boolean test(T t): 对给定的参数进行判断,返回boolean值

Stream limit(long maxSize);’ 截取指定参数的数据,默认指的是前面的数据

Stream skip(long n);跳过指定参数个数的数据,参数指的是跳过前面的数据获得后面的数据

static Stream concat(Stream a ,Stream b);合并a和b两个流成为一个流

Stream distinct();去除流中重复的元素。依赖(hashCode和equals方法)。
在这里插入图片描述
在Stream流中无法直接修改集合,数组等数据源中的数据

Stream流常见的终结方法:

void forEach(Consumer action):对此流的每一个元素执行操作

Consumer接口,上面是需要这个接口的实现类,只有一个抽象方法:void accept(T t);对给定的参数执行此操作 long
count(); 返回流中元素的个数。long类型

forEach方法注意点:

在底层会循环获取到流中的每一个数据。
并循环调用accept方法,并把每一个数据传递给accept方法。
s依次表示了流中的每一个数据
所以,我们只需要在accept方法中写业务逻辑就可以了。

Stream流中的收集方:

R collect(Collector collector);用来保留数据源的数据,注意:此方法只保留数据,返回值不是一个容器
所以使用时需要使用Collectors集合工具类中的方法,获取容器并添加

Collectors 工具类:

public static Collector toList();
把元素收集到 List容器中,并返回此容器

public static Collector toSet();
把元素收集到 Set容器,并返回此容器

public static Collector toMap(Function keyMapper , Functon valueMapper);
把元素收集到 Map容器,并返回此容器

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 测试Stream流的收集方法
 * R collect(Collector collector)
 */
public class StreamDemo_06 {
    public static void main(String[] args) {       
        ArrayList<String> list = new ArrayList<>();
        list.add("张三,23");
        list.add("李四,24");
        list.add("赵六,25");
        list.add("王五,25");

        List<String> list1 = list.stream().filter(s -> {
            String[] split = s.split(",");
            int age = Integer.parseInt(split[1]);
            return age >= 24;
        }).collect(Collectors.toList());
      
        System.out.println(list1);
       
        System.out.println("==========================");
        Set<String> set = list.stream().filter(s -> {
            String[] split = s.split(",");
            int age = Integer.parseInt(split[1]);
            return age >= 24;
        }).collect(Collectors.toSet());
        
        System.out.println(set);
      
        System.out.println("========================");
        Map<String, Integer> map = list.stream().filter(s -> {
            String[] split = s.split(",");
            int age = Integer.parseInt(split[1]);
            return age >= 24;
        }).collect(Collectors.toMap(
                s -> s.split(",")[0],
                s -> Integer.parseInt(s.split(",")[1])));

        System.out.println(map);

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值