Stream流
Java8 中,Collection 新增了流方法,Stream直接通过代码来理解
把所有以“张”开头的元素是存储到一个新的集合
ArrayList<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("张三三");
list.add("王五");
list.add("李四四");
list.stream().filter(s -> s.startWith("张")).filter(s -> s.length() == 3).forEach(System::println);
Stream流的好处
1、直接阅读代码的字面意思即可完美展示无关逻辑方式的语义:获取流、过滤姓张、过滤长度为3、逐一打 印2、Stream流把真正的函数式编程风格引入到Java中
3、代码简洁
Stream流的三类方法
1、获取Stream流,创建一条流水线,并把数据放到流水线上准备进行操作2、中间方法,流水线上的操作,一次操作完毕之后,还可以继续进行其他操作
3、终结方法,一个Stream流只能有一个终结方法,是流水线上的最后一个操作
Stream流中间操作方法
| 方法名 | 说明 |
|---|---|
| Stream filter(Predicate predicate) | 用于对流中的数据进行过滤 |
| Stream limit(long maxSize) | 返回此流中的元素组成的流,截取前指定参数个数的数据 |
| Stream skip(long n) | 跳过指定参数个数的数据,返回由该流的剩余元素组成的流 |
| static Stream concat(Stream a, Stream b) | 合并a和b两个流为一个流 |
| Stream distinct() | 返回由该流的不同元素(根据Object.equals(Object) )组 成的流 |
代码示例
filter
ArrayList<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("张三三");
list.add("王五");
list.add("李四四");
list.stream().filter(s -> s.startWith("张")).filter(s -> s.length() == 3).forEach(System::println);
limit和skip
ArrayList<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("张三三");
list.add("王五");
list.add("李四四");
//取前三个
list.stream().limit(3).forEach(System.out::println);
//跳过第三个元素
list.stream().skip(3).forEach(System.out::println);
distinct
ArrayList<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("张三");
list.add("王五");
list.add("李四");
//去除重复
list.stream().distinct().forEach(System.out::println);
Stream流终结操作方法
| 方法名 | 说明 |
|---|---|
| void forEach(Consumer action) | 对此流的每个元素执行操作 |
| long count() | 返回此流中的元素数 |
代码示例
ArrayList<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("张三");
list.add("王五");
list.add("李四");
list.stream().distinct().forEach(System.out::println);
long len = list.stream().filter(s -> s.startWith("张")).count();
System.out.println(len);
8万+

被折叠的 条评论
为什么被折叠?



