Stream流常用方法

Stream

Stream流中的常用方法

这些方法可以被分成两种:

  • 延迟方法:返回值类型仍然是 Stream 接口自身类型的方法,因此支持链式调用。
  • 终结方法:返回值类型不再是 Stream 接口自身类型的方法,因此不再支持类似 StringBuilder 那样的链式调用。
1.forEach(终结方法) ---->  遍历
public static void main(String[] args) {
       List<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四");
       list.add("王五");
       list.add("赵六");
       list.stream().forEach(s -> {
           System.out.println(s);
       });
    }

打印结果:

 2.filter ----> 过滤
public static void main(String[] args) {
       List<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四");
       list.add("王五");
       list.add("赵六");
       list.stream().filter(s -> s.startsWith("张")).forEach(s -> {
           System.out.println(s);
       });
    }

打印结果:

 3.map ----> 映射(转换)

   如果需要将流中的元素映射到另一个流中,可以使用 map 方法。

public static void main(String[] args) {
       List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        Stream<Integer> stream = list.stream().map(s -> Integer.parseInt(s));
        stream.forEach(s -> {
            System.out.println(s);
        });
    }

打印结果:

4.count(终结方法)----> 统计个数 
    public static void main(String[] args) {
       List<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四");
       list.add("王五");
       list.add("赵六");
       long count = list.stream().count();
       System.out.println(count);
    }

打印结果:

5.limit ----> 取用前几个(截取):

参数是一个long型,如果集合当前长度大于参数则进行截取;否则不进行操作。

    public static void main(String[] args) {
       List<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四");
       list.add("王五");
       list.add("赵六");
       list.stream().limit(3).forEach(s -> {
          System.out.println(s);
       });
    }

打印结果: 

 6.skip ----> 跳过前几个元素

   如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的空流。

    public static void main(String[] args) {
       List<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四");
       list.add("王五");
       list.add("赵六");
       list.stream().skip(3).forEach(s -> {
           System.out.println(s);
       });
    }

打印结果 :

 7.concat ----> 组合(合并流)
public static void main(String[] args) {
        Stream<String> streamA = Stream.of("张无忌");
        Stream<String> streamB = Stream.of("张翠山");
        //合并成一个新的流
        Stream.concat(streamA, streamB).forEach(s -> {
            System.out.println(s);
        });
    }

打印结果:

8.distinct ----> 筛选(去除流中重复的元素)
public static void main(String[] args) {
       List<String> list = new ArrayList<>();
       list.add("张三");
       list.add("李四");
       list.add("王五");
       list.add("赵六");
       list.add("赵六");
       list.stream().distinct().forEach(s -> {
           System.out.println(s);
       });
    }

 打印结果:

9.sorted ----> 自然排序
     public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(124);
        list.add(2);
        list.add(15);
        list.add(12);
        list.add(51);
        list.add(-5);
        list.add(5);

        // 按照自然排序
        list.stream().sorted().forEach(System.out::println);

    }

打印结果: 

10. allMatch,anyMatch,noneMatch ----> 检测匹配(终结方法)

        是否全部匹配:allMatch

        是否至少匹配一个:anyMatch

        是否没有匹配的:noneMatch

        返回一个Boolean

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(124);
        list.add(2);
        list.add(15);
        list.add(12);
        list.add(51);
        list.add(-5);
        list.add(5);
        // 判断是否全部大于5
        boolean b = list.stream().allMatch(i -> i > 5);
        System.out.println(b);   //false
        // 检测是否匹配至少一个元素
        boolean b1 = list.stream().anyMatch(i -> i > 5);
        System.out.println(b1);  //true
        // 检查是否没有匹配的元素
        boolean b2 = list.stream().noneMatch(i -> i > 200);
        System.out.println(b2);  //true
    }
 11.findFirst,findAny ----> 查找元素(终结方法)

        查找第一个元素:findFirst,返回Optional类型

        查找其中一个元素:findAny,返回Optional类型

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(124);
        list.add(2);
        list.add(15);
        list.add(12);
        list.add(51);
        list.add(-5);
        list.add(5);
        // 输出第一个元素
        Optional<Integer> first = list.stream().findFirst();
        System.out.println(first);   // 输出结果是Optional[124]
        // 返回其中一个元素
        Optional<Integer> any = list.stream().findAny();
        System.out.println(any);    // 输出结果是Optional[124]
    }
12.collect(Collector c) -----> 收集(终结方法)

collect(Collector c):将流转化为其他形式,接收一个Collector接口的实现

public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        list.add(new Person("张三",25));
        list.add(new Person("李四",27));
        list.add(new Person("王五",35));
        list.add(new Person("赵六",55));
        // 把年龄大于30岁的人,转成一个list集合
        List<Person> collect = list.stream().filter(person -> person.getAge() > 30).collect(Collectors.toList());
        // 遍历输出(输出王五和赵六)
        for (Person person : collect) {
            System.out.println(person.getName());
        }
    }
 13.iterate ----> 迭代
    public static void main(String[] args) {
        Stream.iterate(0, n -> n + 1)
                .limit(5)
                .forEach(s -> System.out.println(s)); //打印 0 1 2 3 4 
    }
  • 34
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值