java——Stream流

Stream流

将list集合中姓张的过滤到另外一个新的集合中

public class Demo1 {
    public static void main(String[] args) {
        //将list集合  姓张的过滤到另外一个新的集合中
        //然后再将新集合中的名字的长度为3的存到新的集合中
        List<String> list = new ArrayList<>();
        list.add("老邢");
        list.add("张得帅");
        list.add("张飞");
        list.add("张开放");
        list.add("蔡徐坤");
        List<String> list1 = new ArrayList<>();
        for (String s : list) {
            if (s.startsWith("张")) {
               list1.add(s);
            }

        }
        System.out.println(list1);
        List<String> list2 = new ArrayList<>();
        for (String s : list1) {
            if(s.length() == 3) {
                list2.add(s);
            }
        }
        System.out.println(list2);
    }
}

stream流写法

list.stream(). 把一个集合变成Stream流
filter((name)->name.startsWith("张")). 过滤 姓张
filter((name)->name.length() == 3).过滤长度为3 的
forEach((name)-> System.out.println(name));  遍历

获取Stream对象

可以根据集合获取流对象

就是将集合中的数据变成了流的形式

1.根据List集合获取流对象

ArrayList<String> strings = new ArrayList<>();
     strings.add("狗蛋");
     strings.add("老邢");
     strings.add("二贝");
     System.out.println(strings);
     //可以list集合变成一个流对象
     Stream<String> stream = strings.stream();
     System.out.println(stream);//内存地址

2.根据Set集合获取流对象

Set<String> sets = new HashSet<>();
     sets.add("头疼");
     sets.add("腰疼");
     sets.add("哪都疼");
     Stream<String> stream1 = sets.stream();
     System.out.println(stream1);

3.根据map集合获取对象

Map<String, String> maps = new HashMap<>();
        maps.put("1", "黄焖鸡");
        maps.put("2", "酸菜鱼");
        maps.put("3", "酱牛肉");
        //map集合没有stream方法,转为集合再来操作
        Set<String> strings1 = maps.keySet();
        Stream<String> stream2 = strings1.stream();
        Collection<String> values = maps.values();
        Stream<String> stream3 = values.stream();
        Set<Map.Entry<String, String>> entries = maps.entrySet();
        Stream<Map.Entry<String, String>> stream4 = entries.stream();

4.数组

String[] arr = {"a", "b"};
        //数组也可以变成stream流形式的
        Stream<String> arr1 = Stream.of(arr);

Stream流对象下面的方法

方法的名字方法的作用方法的种类是否支持链式操作
count统计个数终结方法
forEach遍历数据终结方法
filter过滤数据可以拼接
limit取前几个数据可以拼接
skip跳过前几个数据可以拼接
map映射方法可以拼接
concat拼接可以拼接

各方法的用法

count和forEach

count:统计流中的个数,返回值是long类型的数据

forEach:遍历流中数据

public class Demo3 {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        strings.add("刘亦菲");
        strings.add("蔡徐坤");
        strings.add("成龙");
        Stream<String> stream = strings.stream();
        long count = stream.count();
        System.out.println(count);
        //链式操作
        long count1 = strings.stream().count();
        System.out.println(count1);
        //froEach
        //对此流的每个元素执行操作
        strings.stream().forEach(new Consumer<String>() {
            @Override
            //将流中的数据 赋值 s
            public void accept(String s) {
                System.out.println(s);
            }
        });
        strings.stream().forEach((s)-> System.out.println(s));

    }
}
filter方法

filter:过滤流中的数据

public class Demo4 {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        strings.add("刘亦菲");
        strings.add("蔡徐坤");
        strings.add("成龙");
        strings.add("杨坤");
        strings.add("陈坤");

        strings.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                //s流中字符串每个的数据
                boolean b = s.endsWith("坤");

                return b;
            }
        }).filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                boolean c = s.startsWith("陈");
                return c;
            }
        }).forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        strings.stream().filter((goudan)->goudan.endsWith("坤")).filter((s)->s.startsWith("陈")).forEach((s)-> System.out.println(s));
    }
}
limit方法

limit:限制输出,取流中的前几个数据

public class Demo5 {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        strings.add("刘亦菲");
        strings.add("蔡徐坤");
        strings.add("成龙");
        strings.add("杨坤");
        strings.add("陈坤");
        strings.add("战三坤");
        strings.add("损五坤");
        strings.add("爱坤");
        //limit 是要前几个数据 根据参数不同
        strings.stream().limit(5).forEach((s)-> System.out.println(s));
        strings.stream().limit(5).filter((s)->s.endsWith("坤")).forEach((s)-> System.out.println(s));
    }
}
map方法

map:处理映射关系的

public class Demo6 {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        strings.add("12");
        strings.add("13");
        strings.add("14");
        strings.add("15");
        //将字符串数字 转为int类型的数据
//        for (String string : strings) {
//
//            int i = Integer.parseInt(string);
//            System.out.println(i);
//        }
        strings.stream().map(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                int i = Integer.parseInt(s);
                return i;
            }
        }).forEach((Integer s)-> System.out.println(s));

        strings.stream().map((s)->Integer.parseInt(s)).forEach((s)-> System.out.println(s));

    }
}
skip方法

skip:跳过流中的前几个值

public class Demo7 {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        strings.add("12");
        strings.add("13");
        strings.add("14");
        strings.add("15");
        strings.stream().skip(2).forEach((s)-> System.out.println(s));
        
    }
}
concat合并两个流
public class Demo8 {
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("12");
        list1.add("13");
        list1.add("14");
        list1.add("15");
        ArrayList<String> strings = new ArrayList<>();
        strings.add("刘亦菲");
        strings.add("蔡徐坤");
        strings.add("成龙");
        strings.add("杨坤");
        Stream<String> stream = list1.stream();
        Stream<String> stream1 = strings.stream();
        //将两个流合并
        Stream<String> concat = Stream.concat(stream, stream1);
        concat.forEach((s)-> System.out.println(s));
    }
}

收集流

stream.collect(Collectors.toList())
stream.collect(Collectors.toSet())
toList();   将流转为List集合
toSet();   将流转为Set集合

流只是中间处理数据的,最后要把流转为集合之后再去使用

public class Demo9 {
    public static void main(String[] args) {
        ArrayList<String> strings = new ArrayList<>();
        strings.add("刘亦菲");
        strings.add("蔡徐坤");
        strings.add("成龙");
        strings.add("杨坤");
        strings.add("陈坤");
        strings.add("战三坤");
        strings.add("损五坤");
        strings.add("爱坤");
        strings.add("爱坤");
        //collect  收集的方法
        //stream.collect(Collectors.toList()) 以什么样的方式收集
        List<String> list = strings.stream().filter((s) -> s.endsWith("坤")).skip(2).collect(Collectors.toList());
        System.out.println(list);
        Set<String> set = strings.stream().filter((s) -> s.endsWith("坤")).skip(2).collect(Collectors.toSet());
        System.out.println(set);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值