StreamAPI简介
1.Stream API是java8的新特性,在日常开发中,streamAPI主要是用来对集合进行数据分析和处理。
2.当在集合中有筛选、修改、提取、计算等需求时,StreamAPI有着比for循环更好的可读性和可操作性。
StreamAPI特点
1.streamAPI操作的数据可以当作“流水线”,流水线的源头是数据源(大多情况是一个集合(通常情况下是List和Set),将数据中的元素挨个进行相同的操作。
2.若要对集合进行处理,则需我们手写处理代码,这就叫做外部迭代。而要对流进行处理,我们只需告诉流我们需要什么结果,处理过程由流自行完成,这就称为内部迭代。
StreamAPI的使用
1.stream的创建和使用
(1)集合.stream() (这种方式较为常用)
List<Person> list = new ArrayList<Person>();
Stream<Person> stream = list.stream();
(2)数组.stream()
String[] names = {"chaimm","peter","john"};
Stream<String> stream = Arrays.stream(names);
(3)Stream.of(v,v,v),直接用Stream.of()方法将类型相同的值转换成Stream
Stream<String> stream = Stream.of("chaimm","peter","john");
(4)文件流
try(Stream lines = Files.lines(Paths.get(“文件路径名”),Charset.defaultCharset())){
//可对lines做一些操作
}catch(IOException e){
}
(5)iterator创建无限流
Stream.iterate(0, n -> n + 2)
.limit(10)
.forEach(System.out::println);
2.StreamAPI常用的操作函数
(1)筛选filter
filter函数参数是接收一段lambda表达式,此表达式返回值为Boolean类型,在执行过程中,StreamAPI中的数据只有使参数中的lambda表达式为true时会被保留,结果为false的会被过滤掉,例如:筛选出人群中的学生。`
List<Person> result = list.stream()
.filter(Person::isStudent)
.collect(toList());
(2)去重distinct
如果集合中有相同对象,则去除掉重复的结果就是distinct的结果‘
List<Person> result = list.stream()
.distinct()
.collect(toList());
(3)截取limit
在Stream中截取其中前n个数据
List<Person> result = list.stream()
.limit(3)
.collect(toList());
(4)跳过skip
跳过Stream中的前N条数据
List<Person> result = list.stream()
.skip(3)
.collect(toList());
(5)映射map
对Stream中的每一个元素执行一个函数,使执行结果以另一种形式输出。Stream会将每一个元素传输到map函数中执行lambda表达式,将执行的结果放入到一个新的Stream中
List<User> result = list.stream()
.map(User::getName)
.collect(toList());
(6)获取第一个元素findFirst
获取Stream中第一个元素
Optional<Person> person = list.stream().findFirst();