了解Stream流

java Stream流

单列集合

创建一个ArrayList 集合,里面存储四个数据,调用 s t r e a m \color{pink}{stream} stream,其中forEach是打印输出。

 ArrayList<String> list = new ArrayList<>();
 Collections.addAll(list,"张三丰","张飞","曹操","孙尚香");

list.stream().forEach(s -> System.out.println(s));

双列集合

创建一个HashMap集合,里面存储对应的Key,Vlaue ,遍历人名。

HashMap<Integer,String> hm = new HashMap<>();

hm.put(1,"张三丰");
 hm.put(2,"张飞");
 hm.put(3,"曹操");
 hm.put(4,"孙尚香");

 Set<Integer> set = hm.keySet();

set.stream().forEach(s-> System.out.println(hm.get(s)));

数组

创建一个数组,存储1,2,3 值,使用 s t r e a m ( a r r ) \color{pink}{stream(arr)} stream(arr),遍历数组。

Integer[] arr = {1,2,3};
Arrays.stream(arr).forEach(s-> System.out.println(s));

可变参数

直接将数据放入 S t r e a m . o f \color{pink}{Stream.of} Stream.of中,遍历数据。

Stream.of(1,2,3,4,5,6,7).forEach(s-> System.out.println(s));

filter

什么是filter

  filter(函数式接口)
  filter方法会拿到流中的每一个数据
  把每一个数据传递到Lambda表达式的形参s
  如果返回的是false就丢弃,如果返回的是true留下来

首先我们创建一个ArrayList集合,里面存储一些数据,方便我们后续使用

ArrayList<String> list  = new ArrayList<>();
Collections.addAll(list,"1","2","3","4","5","5","1");

从代码中理解filter

list.stream().filter((String s)->{return true;}).forEach(s -> System.out.println(s));

解释: f i l t e r ( ( S t r i n g \color{red}{filter((String} filter((String s ) − > { r e t u r n \color{red}{s)->{\{return }} s)>{return t r u e ; } ) \color{red}{true;\})} true;})
s 代表集合中存储的每一个数据,而true 表示每一个数据都会保留。

截取元素 limt()

list.stream().limit(3).forEach(s-> System.out.println(s));

解释: 表示截取前三个元素,只遍历前三个数据。

跳过指定参数个数的数据 skip()

list.stream().skip(3).forEach(s-> System.out.println(s));

解释:跳过前三个元素,遍历后面的元素。

拼接 concat(流1,流2)

Stream<String> stream1 = list.stream().limit(3);
Stream<String> stream2 = list.stream().skip(3);
Stream.concat(stream1,stream2).forEach(s-> System.out.println(s));

解释:将 s t r e a m 1 , s t r e a m 2 \color{red}{stream1,stream2} stream1,stream2流进行拼接打印。

去重 distinct

保证元素的唯一性。

list.stream().distinct().forEach(s-> System.out.println(s));

排序 sorted

升序

默认升序

list.stream().sorted().forEach(s-> System.out.println(s));

降序

list.stream().sorted(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return Integer.parseInt(o2)-Integer.parseInt(o1);
            }
        }).forEach(s-> System.out.println(s));

解释:使用匿名内部类,Comparator并重写compar()方法,使用o2-o1,因为我们上面存储的数据是String类型,我们将类型转化为int类型。

统计数据元素 count()

list.stream().count();

收集Stream流的数据

stream的方法并不改变原有的集合。

存储数据,方便我们下面理解。

ArrayList<Integer> list = new ArrayList<>();

Collections.addAll(list,1,2,3,4,5,5,6);

collect方法只负责收集数据,而真正创建集合对象是Collectors.toList

List

List<Integer> newList = list.stream().filter(s -> s > 3).collect(Collectors.toList());
System.out.println(newList);

解释:filter里面的数据是,只要数据中大于3的元素。将大于3的元素存储在一个新的集合newList中。

Set

Set<Integer> set = list.stream().skip(3).collect(Collectors.toSet());
System.out.println(set);

解释:跳过原有list集合中的前三个元素,将其余元素存储在set集合中,由于Set集合的特性,自动给剩余的元素去重,保证元素的唯一性。

Map

Map集合理解起来有些难度,我直接在代码中写注释。

ArrayList<String> list = new ArrayList<>();

        Collections.addAll(list,"zhangsan,23","lisi,24","wangwu,25");
	//创建一个Arraylist的集合,里面存储3个数据

        Map<String, Integer> map = list.stream().filter(s -> {
            String[] strings = s.split(",");
			//将ArrayList集合中的数据,使用,分割开,存储到strings的数组中

            int age = Integer.parseInt(strings[1]);
			//由于上面的数据已经分割存储到数组中,strings[1]中存储的是数字字符串,23,24,25,
			//这里我们将String类型转换为int类型
            return age >= 24;
			//只要年龄大于等于24的数据
			
            // }).collect(Collectors.toMap(Function类型的数据,Function类型的数据));
        }).collect(Collectors.toMap(
                (String s) -> {
                    return s.split(",")[0];
                    //这里返回的是Map的键Key lisi,wangwu
                },
                (String s) -> {
                    return Integer.parseInt(s.split(",")[1]);
                    //这里返回的是Map的值Value 24,25
                })
        );

        System.out.println(map) ;

学的不是技术,更是梦想!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君生我老

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值