Stream流
Stream流式编程
从JDK8开始,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于简化已有集合类的数据操作,Stream流相当
于工厂里面的流水线,提供了丰富的API,方便对数据进行加工处理。
创建流的方式
方式1:根据集合获取
方式2:根据静态方法of获取流
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(11);
list.add(22);
list.add(33);
//创建流 根据集合获取流
Stream<Integer> stream = list.stream();
stream.forEach(integer -> System.out.println(integer));
//使用静态方法of方法获取流
Stream<Integer> stream1 = Stream.of(22, 11, 33);
}
Stream常用方法
遍历
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(11, 22, 33);
//方法引用
stream.forEach(System.out::println);
}
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(11, 22, 33);
/*stream.filter(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) {
//返回值为true,当前数据就会保留到新的流中
return integer%2==0;
}
});*/
//过滤数据,得到符合条件的数据,放入新的Stream中
stream.filter(a -> a%2==0).forEach(System.out::println);
}
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(11, 22, 33);
//截取出前两个
stream.limit(2).forEach(System.out::println);
}
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(11, 22, 33);
//跳过
stream.skip(1).forEach(System.out::println);
}
public class Demo_concat {
public static void main(String[] args) {
Stream<String> stream1 = Stream.of("11", "22", "33");
Stream<String> stream2 = Stream.of("44", "55", "66");
//静态
Stream<String> stream3 = Stream.concat(stream1, stream2);
stream3.forEach(System.out::println);
}
}
public class Demo_collect {
public static void main(String[] args) {
//流是生产线,不保存数据,只做加工
//加工好的数据要保存,通常会把数据转进集合
Stream<Integer> stream = Stream.of(11, 22, 33);
List<Integer> list = stream.collect(Collectors.toList());
Set<Integer> set = stream.collect(Collectors.toSet());
}
}
Stream流的使用注意
1.一个Stream流对象只能操作一次
2.调用中间方法会返回新流,以便下次操作使用
3.终结方法如果没调用,中间方法也不会执行。
最后
如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。