java stream流 超详解

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);
  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值