java Stream流 超详解

本文详细介绍了JavaStreamAPI在操作单列集合、双列集合、数组和零散数据时的使用方法,包括filter、limit、skip、map等中间方法,以及toArray和collect的最终方法,展示了Lambda表达式的应用。
摘要由CSDN通过智能技术生成

java stream 流

获取stream流

获取方式方法
单列集合单列集合的上层接口Collection,直接用 Collection 中的stream方法
双列集合需要将双列集合转成单列集合才能使用stream 方法
数组使用Arrays工具类中的静态方法
一堆零散的数据使用Stream接口中的方法

stream 流相当一是 “工厂的流水线 ”

单列集合:
          //创建集合
          List<String> list = Arrays.asList("张三", "李四", "王五");
  ​
          // foeEach中的参数原本是要写一个consumer接口,
          // 但是因为comsumer接口 是 @FunctionalInterface (函数式接口)所以简写成lambada表达式的写法
          list.stream().forEach(new Consumer<String>() {
              @Override
              public void accept(String s) {
                  // s 参数:代表流里面的每一个数据   -> { 你要每一个数据进行什么样的操作 }
                  //这里也可以理解成遍历集合,s → 是集合里的每一个元素
                  System.out.println(s);
              }
          });
          
          //  stream流我们一般喜欢使用 Lambda 表达式的写法
          list.stream().forEach(s -> System.out.println(s));

双列集合:
  HashMap<String,Integer> map = new HashMap<>();
  map.put("张三",18);
  map.put("李四",20);
  map.put("王五",30);
  // keyset → map中的键
  map.keySet().stream().forEach(s -> System.out.println(s));
  //entrySet → map中的键值对象
  map.entrySet().stream().forEach(s-> System.out.println(s));
数组:
  
          int[] arr = {1,23,56,33};
          Arrays.stream(arr).forEach(s -> System.out.println(s));

零散数据:
  Stream.of("s",1,"555").forEach(s -> System.out.println(s));

stream流的中间方法

方法名说明
filter过滤
limit获取前几个元素
skip跳过前几个元素
distinct元素去重(依赖hashCode和equals方法)
map转换流中的数据类型
filter
  List<String> list = Arrays.asList("张三", "李四", "王五", "张思");
  // 过滤掉不姓张的人
  list.stream().filter(new Predicate<String>() {
      @Override
      public boolean test(String s) {
          boolean result = s.startsWith("张");
          //return true 要留下来的数据
          //return false 要过滤掉的数据
          return result;
      }
  }).forEach(s -> System.out.println(s));
  ​
  list.stream().filter(s->s.startsWith("张")).forEach(s -> System.out.println(s));

limit
  List<String> list = Arrays.asList("张三", "李四", "王五", "张思");
  //        //获取前几个元素 和索引无关
          list.stream().limit(2).forEach(s -> System.out.println(s));
skip
  List<String> list = Arrays.asList("张三", "李四", "王五", "张思");
  //        //跳过第几个元素  和索引无关
          list.stream().skip(3).forEach(s -> System.out.println(s));

map
  List<String> list = Arrays.asList("1", "4", "5", "7");
  /**
   * 匿名内部类的写法
   */
  //map 可以将流中的数据的 类型进行转换
  //现在我们就将 string →  int
  //new Function<String, Integer>  string  → 原本的数据类型 integer 要转成的数据类型
  list.stream().map(new Function<String, Integer>() {
      @Override
      public Integer apply(String s) {
          // s → 流中的每一个数据
          int result = Integer.parseInt(s);
          return result;
  ​
      }
  }).forEach(s-> System.out.println(s));
  ​
  /**
   *  2. Lambda 表达式的写法
   */
  list.stream().map(s->Integer.parseInt(s)).forEach(s-> System.out.println(s));

stream流的最终方法

toArray
  List<String> list = Arrays.asList("张三", "李四", "王五", "张思");
  //将姓张的人收集到数组中
  Object[] arr = list.stream().filter(s -> s.startsWith("张")).toArray();
  System.out.println(Arrays.toString(arr));

collect
  List<String> list = Arrays.asList("张三", "李四", "王五", "张思");
  //将姓张的人收集到集合中
  List<String> list1 = list.stream().filter(s -> s.startsWith("张")).collect(Collectors.toList());
  System.out.println(list1);
  ​
          //将姓张的收集到set集合中
  Set<String> set = list.stream().filter(s -> s.startsWith("张")).collect(Collectors.toSet());
  System.out.println(set);

收集到map中

  List<String> list = Arrays.asList("张三-18", "李四-19", "王五-20", "张思-12");
  //将数据收集到map中
  //Collectors.toMap(参数一:制定键生成的规则,制定值生成的规则)
  Map<String, String> map = list.stream().collect(Collectors.toMap(s -> s.split("-")[0], s -> s.split("-")[1]));
  System.out.println(map);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值