Stream类

Stream类【Stream流】

1、Collection集合的获取方式:

对象名.stream();

2、Map集合获取方式:

ketSet().stream();

values().stream();

entrySet().stream();

3、数组的获取方式:

Stream.of(数组名);

4、注意事项:

因为Stream类型提供的功能主要是对循环做替换,所以只有集合和数组才需要使用

public static void main(String[] args) {
    //单列集合获取Stream对象
    ArrayList<String > arr = new ArrayList<>();
    Stream<String > s = arr.stream();
    //Map集合获取Streamduix
    HashMap<String, Integer> map = new HashMap<>();
    Stream<String > s1 = map.keySet().stream();
    Stream<Integer> s2 = map.values().stream();
    Stream<Map.Entry<String ,Integer>> s3 = map.entrySet().stream();
    //数组获取Stream对象
    Integer[] i = new Integer[10];
    Stream<Integer> s4 = Stream.of(i);
}

Stream类的常用方法

1、Stream类中包含了一些对数据过滤和筛选以及获取的方法,由此来代替循环和判断语句。

2、分类:

延迟方法:使用完该类方法之后,返回值是一个Stream类的对象,可以继续调用类 中的方法。

终结方法:使用完该类方法之后,返回值不再是一个Stream类的对象,不能继续使用 类中的方法。

方法罗列

  • forEach(Consumer<? super T> action) :终结方法

    该方法可以自动获取流中每一个数据,并对获取的数据操作

    数据的操作方式根据消费型接口的实现类重写。

  • count() :返回此流中的元素数。终结方法

  • filter(Predicate<? super T> predicate) :延迟方法

    该方法可以自动获取流中的每一个数据进行判断,如果数据判断结果为真,就 在流中存储,否则不存储该数据

  • limit(long m) :将流中的前m个元素保留,其余的删除 延迟方法

  • skip(long n) : 跳过前n个元素,保留后面的元素 延迟方法

  • map(Function<? super T,? extends R> mapper) :

    该方法自动获取流中的每一个数据,并对数据处理,处理之后返回一个新 的数据。具体的处理方式根据实现类对象确定。

  • concat(Stream<? extends T> a, Stream<? extends T> b): 将两个流中的数据进行合并,合并为一个流对象

  • distinct():去除流中重复的元素

  • toArray():把stream流中的数据收集到数组中

  • collect(Collector c):把stream流中的数据收集到指定的集合中

    Collector:参数的类型 是一个接口获取可以通过工具类Collectors的方法获取

    常用:

    • 获取List集合:Collectors.toList()

    • 获取Set集合: Collectors.toSet()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQCvo0Id-1647260665465)(C:\Users\12994\Desktop\笔记整理\整理复习\Stream类.assets\图片1.png)]

案例

有两个Arraylist集合,存储队伍中的多个成员姓名,使用Stream方式,对以下步骤进行操作
1、第一个队伍只要名字为3个字的成员姓名
2、第一个队伍只要筛选之后的前三个人
3、第二个队伍只要姓张的
4、第二个队伍筛选之后不要前两个人
5、将两个队伍合并成一个队伍
6、合并之后的队伍中的所有人的Person(自定义类型)对象,存储到一个ArrayList集合中

队伍1:宫本武藏、宋公明、苏有朋、石头人、时传祥、李耳、庄子、洪七公
队伍2:帕瓦罗蒂、张三疯、赵薇薇、张自忠、孛儿只斤铁木真、张天爱、张翠花

public static void main(String[] args) {
    String[] s1 = "宫本武藏、宋公明、苏有朋、石头人、时传祥、李耳、庄子、洪七公".split("、");
    String[] s2 = "帕瓦罗蒂、张三疯、赵薇薇、张自忠、孛儿只斤铁木真、张天爱、张翠花".split("、");
    //利用 Arrays 工具类中的asList()方法把字符串切割为数组
    List<String> l1 = Arrays.asList(s1);
    List<String> l2 = Arrays.asList(s2);
    Stream<String> str1= l1.stream();
    Stream<String> str2= l2.stream();

    //完成1、2、3、4步
     Stream.concat(str1.filter(s -> s.length()==3).limit(3), str2.filter(s -> s.startsWith("张")).skip(2))
             //利用map中的函数把字符串封装为Person对象
             .map(Person::new)
             //把对象转为集合
             .collect(Collectors.toList())
             //遍历集合
             .forEach(System.out::println);
}
/*
Person{name='宋公明'}
Person{name='苏有朋'}
Person{name='石头人'}
Person{name='张天爱'}
Person{name='张翠花'}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

皮卡丘不断更

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

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

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

打赏作者

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

抵扣说明:

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

余额充值