Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。不会去存储对象
创建Steam:
由数组创建流,通过Arrays中的静态方法 stream() 创建数据源
static < T> Stream< T> stream(T[] array): 返回一个流。
public void stream() {
List<StreamObject> list = new ArrayList();
Stream<StreamObject> stream = list.stream();
Stream<StreamObject> stream1 = list.parallelStream();
}
由数组创建流,通过Arrays中的静态方法 stream() 创建数据源
static < T> Stream< T> stream(T[] array): 返回一个流。
public void stream2() {
Integer[] integer = new Integer[20];
Stream<Integer> stream = Arrays.stream(integer);
}
Stream中间操作:
筛选与切片:
1.filter(Predicate p) 接收 Lambda表达式 , 从流中排除某些元素
2.distinct() 筛选,通过流所生成元素的 hashCode() 和 equals() 去 除重复元素
3.limit(long maxSize) 截断流,使其元素不超过给定数量
4.skip(long n) 跳过元素,返回一个扔掉了前 n 个元素的流。若流中元素 不足 n 个,则返回一个空流。与 limit(n) 互补
映射:
1.map(Function f) 接收一个函数作为参数,该函数会被应用到每个元 素上,并将其映射成一个新的元素
2.mapToDouble(ToDoubleFunction f) 接收一个函数作为参数,该函数会被应用到每个元 素上,产生一个新的 DoubleStream
3.mapToInt(ToIntFunction f) 接收一个函数作为参数,该函数会被应用到每个元 素上,产生一个新的 IntStream
排序:
1.sorted() 产生一个新流,其中按自然顺序排序
2.sorted(Comparator comp) 产生一个新流,其中按比较器顺序排序
应用:
public static void test() {
List<StreamObject> list = Arrays.asList(
new StreamObject(1, "学", "习", "烂"),
new StreamObject(2, "学", "习", "烂"),
new StreamObject(2, "学", "习", "烂"),
new StreamObject(3, "学", "习", "烂")
);
Stream<StreamObject> stream =
list.stream()
.filter(StreamObject::method)
.distinct()
.limit(2)
.skip(1);
stream.forEach(System.out::println);
System.out.println(list);
}
这里控制台会输出ID等于3的那条数据,在我们输出list的时候,我们发现list的数据并没有收到改变。