多个流的中间操作可连成一个流水线,除非流水线上触发终端操作,否则中间操作不会执行任何的处理!而在终止操作执行时一次性全部处理.将这种处理方式称为”惰性求值”
下面我们分三个部分来介绍流的中间操作
1.筛片与切片
筛选与切片中共涉及一下几个方法
-
filter() //过渡,从流中排除某些元素
-
limit() //截断流,使之不超过指定数量
-
distinct() //筛选,通过流所生成元素的hashCode()和equals()方法去除重复元素
-
skip() //跳过指定数量的元素
下面我们进行代码示例:
package stream流;
import java.util.ArrayList;
public class StreamDemo3 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
list.add(1);
list.add(5);
list.add(4);
list.add(9);
list.add(5);
list.add(3);
list.add(2);
list.stream()
.filter((e)->{ return e>3;})
.distinct()
.limit(3)
.skip(1)
.forEach((e)-> System.out.println(e));
}
}
这里我们通过一系列流的中间操作,最终输出的结果为:
4 9
2.映射
-
此处映射就类似于高中函数中所学习的映射,即具有一一对应的关系
此处共涉及到两个方法,下面来逐一说明
①map();
//此方法为接收一个函数作为参数,将元素转换成其他形式或提取信息,该函数会被应用到每个元素上,并将其映射成为一个新的元素
这里我们先自定义一个类
package stream流;
class Apple {
private int num;
private String color;
private String price;
public Apple(int num, String color, String price) {
this.num = num;
this.color = color;
this.price = price;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public String toString() {
return "Apple{" +
"num=" + num +
", color='" + color + '\'' +
", price='" + price + '\'' +
'}';
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class StreamDemo4 {
public static void main(String[] args) {
Apple apple1 = new Apple(100,"白色","8900");
Apple apple2 = new Apple(101,"黑色","9900");
Apple apple3 = new Apple(102,"白色","8500");
Apple apple4 = new Apple(103,"蓝色","8900");
Apple apple5 = new Apple(104,"白色","9200");
List<Apple> apples = new ArrayList<>();
apples.add(apple1);
apples.add(apple2);
apples.add(apple3);
apples.add(apple4);
apples.add(apple5);
//map(); 将其映射为一个新的元素
apples.stream()
.filter(e->{return e.getColor().equals("白色");})
.map(Apple::getPrice)
.forEach(e-> System.out.println(e));
}
}
这里我们首先使用filter()方法筛选出部分元素,再通过map方法,将其映射为一个新的元素
3.排序
因为排序通常涉及到自然排序与选择排序,因此此处也有两个排序方法
-
sorted()
//自然排序
package stream流; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class SortTest { public static void main(String[] args) { //自然排序 List<Integer> list = Arrays.asList(21,42,35,2,15,99,85); list.stream() .sorted() .forEach(System.out::println); } }
-
sorted() //定制排序
package stream流; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class SortTest { public static void main(String[] args) { //定制排序 List<Employee> employees = EmployeeDate.getEmployees(); employees.stream() .sorted() .forEach(System.out::println); } }
版权声明:本文为weixin_52629592原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。