一文学会stream流

stream流的思想

类似于流水线,

每一次流操作基本分为以下三步

  1. 创建一个流,

  2. 对流使用中间进行操作(过滤,转换),

  3. 使用终结方法(统计,打印,收集)对流中数据进行操作三步stream流获取

stream流获取

获取方式方法名说明
单列集合(list set ).stream()collection的默认方法
双列集合(map)无法直接使用stream流
数组Array.stream()Arrays工具类中的静态方法
一堆零散数据Stream.of()Stream接口中的静态方法

单列结合获取stream

// List获取stream流
ArrayList<String> list = new ArrayList<>();
list.add("11");
list.add("22");
list.add("33");
list.add("44");
list.add("55");
Stream<String> stream1 = list.stream();
// 匿名内部类
stream1.forEach(new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
});
System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
//  lambda表达式
list.stream().forEach(s -> System.out.println(s));

结果:

在这里插入图片描述

双列集合获取stream

先将双列集合变为单列集合

  1. entrySet

  2. keySet

// 创建双列集合
HashMap<String, Integer> map = new HashMap<>();
map.put("aa", 111);
map.put("bb", 222);
map.put("cc", 333);
map.put("dd", 444);
map.put("ee", 555);
// map获取stream流

// 先将map 变为单列
Set<Map.Entry<String, Integer>> entries = map.entrySet();
// 然后将entry变成流
// 匿名内部类
entries.stream().forEach(new Consumer<Map.Entry<String, Integer>>() {
    @Override
    public void accept(Map.Entry<String, Integer> stringIntegerEntry) {
        System.out.println(stringIntegerEntry);
    }
});

System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
//  lambda表达式
map.entrySet().stream().forEach(s -> System.out.println(s));

 // keySett获取流并使用匿名内部类打印
        map.keySet().stream().forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s + "==");
                System.out.println(map.get(s));
            }
        });
        System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
        // keySett获取流并使用lambda表达式打印

        map.keySet().stream().forEach(s -> {
            System.out.println(s);
            System.out.println(map.get(s));
        });

结果:

在这里插入图片描述

数组获取stream 流

可以使用工具类中Arrays中的静态方法Arrays.stream()来生成stream流

     // 创建数组
        int[] array = {1, 2, 3, 4, 5, 6, 7};
//       获取stream流
//       使用lambda表达式
        Arrays.stream(array).forEach(s -> System.out.println(s));

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQRG35pj-1675586258850)(F:/study/image-20230205112833336.png)]

一堆零散数据获取sream流

Stream.of(1, 2, 3, 4, 5).forEach(s -> System.out.println(s));
System.out.println("***************------------------------");
Stream.of("a", "a", "a", "a", "a").forEach(s -> System.out.println(s));

结果:
在这里插入图片描述

中间方法

filter过滤
limit获取前几个元素
skip跳过前几个元素
distinst元素去重
concat合并a和b两个流为一个流
map转换流中的数据类型
HashMap<String, Integer> map = new HashMap<>();
map.put("aa", 111);
map.put("ab", 222);
map.put("ac", 333);
map.put("bd", 444);
map.put("be", 555);
map.keySet().stream().filter(s -> s.startsWith("a")).forEach(s -> System.out.println(s));
System.out.println("------------------------------------------------");
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四s");
list.add("李五");
list.add("张四");
list.add("张四");
list.add("张哼");
list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));
System.out.println("----------------------------------");
list.stream().filter(s -> s.length() == 3).forEach(s -> System.out.println(s));
System.out.println("----------------------------------");
list.stream().skip(2).forEach(s -> System.out.println(s));
list.stream().filter(s -> s.length() == 3).forEach(s -> System.out.println(s));
System.out.println("----------------------------------");
list.stream().distinct().forEach(s -> System.out.println(s));
System.out.println("----------------------------------");
Stream.concat( list.stream().filter(s -> s.startsWith("张")),list.stream().distinct()).forEach(s -> System.out.println(s));
System.out.println("----------------------------------");
List<Object> list1 = list.stream().map(s -> {
    if (s.startsWith("张")) {
        s = s + "牛逼666";
    }
    return s;
}).collect(Collectors.toList());
for (Object o : list1) {
    System.out.println(o);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

比巴卜果粒多

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

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

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

打赏作者

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

抵扣说明:

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

余额充值