一文学会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);
}

猜你喜欢

转载自blog.csdn.net/qq_44431331/article/details/128891564