Stream流的学习

1.1、体验Stream流

package com.itheima01;

import java.util.ArrayList;

public class StreamDemo {
    public static void main(String[] args) {
//       创建一个集合,存储姓名
        ArrayList<String> array=new ArrayList<>();
        array.add("张伯伦");
        array.add("梁朝伟");
        array.add("张继科");
        array.add("张浩");
        array.add("田云");
        array.add("老铁");
        array.add("老王");
        array.stream().filter(s->s.startsWith("张")).filter(s->s.length()>=3).forEach(s-> System.out.println("姓张的三个字的名字有:"+s));
    }

}

1.2、Stream流的生成方式

Collection体系的集合可以使用默认方法stream()生成流
            default Stream<E>stream()
Map体系的集合间接的生成流
数组可以通过Stream接口的静态方法of(T...values)生成流

package com.itheima02;
/*
Collection体系的集合可以使用默认方法stream()生成流
    default Stream<E>stream()
Map体系的集合间接的生成流
数组可以通过Stream接口的静态方法of(T...values)生成流
*/


import java.util.*;
import java.util.stream.Stream;

public class StreamDemo {
    public static void main(String[] args) {
//        Collection体系的集合可以使用默认方法stream()生成流
//        default Stream<E>stream()
        List<String> list = new ArrayList<>();
        Stream<String> ListStream = list.stream();

        Set<String> set = new HashSet<>();
        Stream<String> setStream = set.stream();
//        Map体系的集合间接的生成流
        Map<String, Integer> map = new HashMap<String, Integer>();

        Set<String> keyset = map.keySet();
        Stream<String> keysetStream = keyset.stream();
//        Integer value = map.get(keyset);
        Collection<Integer> v = map.values();
        Stream<Integer> iStream = v.stream();

        Stream<String> keyStream = map.keySet().stream();
        Stream<Integer> vStream = map.values().stream();


        Set<Map.Entry<String, Integer>> entry = map.entrySet();
        Stream<Map.Entry<String, Integer>> entryStream = entry.stream();
//        数组可以通过Stream接口的静态方法of(T...values)生成流
        String[] strArray = {"hello", "world", "java"};
        Stream<String> strArrayStream=Stream.of(strArray);

        Stream<String> sStream=Stream.of("hello","world","java");

    }
}

Stream常见的方法:

limit()返回指定长度的流的元素

skip()

package com.itheima01;

import java.util.ArrayList;

public class StreamDemo {
    public static void main(String[] args) {
//       创建一个集合,存储姓名
        ArrayList<String> array=new ArrayList<>();
        array.add("张伯伦");
        array.add("梁朝伟");
        array.add("张继科");
        array.add("张浩");
        array.add("田云");
        array.add("老铁");
        array.add("老王");
//        array.stream().filter(s->s.startsWith("张")).filter(s->s.length()>=3).forEach(s-> System.out.println("姓张的三个字的名字有:"+s));
//        Stream<T> limit(long maxSize)返回此流中的元素组成的流,截取指定的参数个数的数据
        array.stream().limit(2).forEach(System.out::println);
//        Stream<T> skip(long n)跳过指定参数个数的数据,返回由该流的剩余元素组成的
        System.out.println("-------跳过指定参数个数的数据,返回由该流的剩余元素组成的-----");
        array.stream().skip(3).forEach(System.out::println);


    }

}

1.3、Stream常见的中间操作方法

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

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

Stream<T> limit(long maxSize)      返回此流中的元素组成的流,截取前指定参数个数的数据 

Stream<T> skip(long n)         跳过指定参数个数的数据,返回由该流的剩余元素组成的流

static<T>Stream<T> concat(Stream a,Stream b)合并a和b两个流为一个流 

Stream<T> distinct() 返回由该流的不同元素(根据Object.equals(Object))组成的流

Stream<T> sorted() 返回由此流的元素组成的流,根据自然顺序排序

Stream<T> sorted(Comparator Comparator) 返回由该流的元素组成的流,根据提供的Comparator进行排序 

package com.itheima03;

import java.util.ArrayList;
import java.util.stream.Stream;

public class StreamDemo {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        list.add("科比");
        list.add("詹姆斯");
        list.add("杜兰特");
        list.add("欧文");
        list.add("哈登");
        list.add("乔治");
        list.add("小卡");
        list.add("库里");
        list.add("戴维斯");
//        使用filter()过滤
list.stream().filter(s->s.startsWith("小")).forEach(s->System.out.println(s));
//        需求1:截取4个数据组成一个流
        Stream<String> s1=list.stream().limit(4);
//        需求2:跳过2个数据组成一个流
        Stream<String> s2=list.stream().skip(2);
        System.out.println("————————————合并两个流——————————————————————");
//        需求3:合并需求1和需求2得到的流,并把结果在控制台输出
//        Stream.concat(s1,s2).forEach(System.out::println);
//        需求4:合并需求1和需求2得到的流,并把结果在控制台输出,要求字符串元素不能重复
Stream.concat(s1,s2).distinct().forEach(System.out::println);




    }
}
package com.itheima03;

import java.util.ArrayList;
//Stream<T> sorted() 返回由此流的元素组成的流,根据自然顺序排序
//Stream<T> sorted(Comparator Comparator) 返回由该流的元素组成的流,根据提供的Comparator进行排序 
public class StreamDemo02 {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        list.add("kobe");
        list.add("jans");
        list.add("rose");
        list.add("harden");
        list.add("ads");
        list.add("kill");
        list.add("cuer");
//        需求1:按照字母顺序把数据在控制台输出
//        list.stream().sorted().forEach(s->System.out.println(s));
//        list.stream().sorted().forEach(System.out::println);
//需求2:按照字符串长度把数据在控制台输出
//     字符串短的排前面   list.stream().sorted((s1,s2)->-s1.length()-s2.length()).forEach(System.out::println);
          list.stream().sorted((s1,s2) ->{
              int num=s1.length()-s2.length();
              int num2=num==0?s1.compareTo(s2):num;
              return num2;
          }).forEach(System.out::println);

    }
}

<R>Stream<R> map(Function mapper) 返回由给定函数应用于此流的元素的结果组成的流

                Function接口中的方法                R apply(T t)

IntStream map ToInt(ToIntFunction tion mapper) 返回一个IntStream其中包含将给定函数应用于此流的元素结果

                IntStream表示原始int流

                ToIntFunction 接口中的方法      int applyAsInt(T value)

1.4、Stream流的常见终结操作

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

        Consumer接口的方法                void acceopt(T t)对给定的参数执行此操作

long count()返回此流中的元素数

package com.itheima03;

import java.util.ArrayList;

public class StreamDemo04 {
    public static void main(String[] args) {
//       创建一个集合,存储姓名
        ArrayList<String> array=new ArrayList<>();
        array.add("张伯伦");
        array.add("梁朝伟");
        array.add("张继科");
        array.add("张浩");
        array.add("田云");
        array.add("老铁");
        array.add("老王");
//需求1:把集合中元素在控制台输出
        long countZhangName = array.stream().filter(s -> s.startsWith("张")).count();
        System.out.println(countZhangName);
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值