java8的集合数组的Stream操作
Stream流操作
java8 的集合/数组的Stream操作 函数式编程: Function接⼝ lambda表达式
特征:
1 流不会存储元素,遍历完⼀次就等于消费完了.
2. 流都是懒加载的,只有你⽤到结果的时候才会去执⾏.
3. 流只会操作数据,不会改变数据.
⼀\创建stream流的⽅法
1,通过集合创建,集合对象,stream()⽅法得到及河流对象
eg:
Stream <student> stream = list.stream()
2,得到数组的stream对象 : Array.stream(数组名)
eg:
Integer [] arr = {1,2,3,4,5};
Stream<Integer > intstream = Arrays.stream(arr);
3,通过多个值创建多个值的stream对象: stream.of()
eg:
Stream<String> stream = stream.of("zhangsan","lisi","haha");
⼆\stream流的⽅法
1,Steam filter(Predicate<? super T> predicate) 对流中元素进⾏过滤操作, predicate lambda表达式, 要求这个表达式的返回值类型 boolean
//过滤, >=3 并且  <=5    [3,4,5]
intStream.filter(a -> a>=3&& a<=5).forEach(System.out::println);
//打印list集合的元素
manList.stream().forEach(System.out::println);
/*
for (Student stu : manList) {
System.out.println(stu);
}
*/
System.out.println("=================================");
2, Stream distinct() 去重调⽤是元素的hashCode() equails()⽅法
System.out.println("=================================");
//Stream<T> distinct()  去重调⽤是元素的hashCode()  equails()⽅法
strSream.distinct().forEach(System.out::println);
3, Stream limit(long maxSize) 返回由此流的元素组成的流,截短长度不能超过 maxSize 。
//Stream<T> limit(long maxSize)  返回由此流的元素组成的流,截短长度不能超过 maxSize 。
//list.stream().limit(2).forEach(System.out::println);
4, Stream skip(long n) 在丢弃流的第⼀个 n元素后,返回由该流的 n元素组成的流。
//Stream<T> skip(long n)  在丢弃流的第⼀个 n元素后,返回由该流的 n元素组成的流。
list.stream().skip(2).forEach(System.out::println);
//做分页页码: 2,  页容量: 2    limit()
//      1    0
//      2    2
//      3    4
/
/  skip中值  = (页码-1)*页容量
// limit中值 = 页容量
System.out.println("=================================");
list.stream().skip(2).limit(2).forEach(System.out::println);
5, Stream map(Function<? super T,? extends R> mapper)
// 对数组每个元素加5
//{1,2,3,4,5,6};  --> {1+5,2+5,...}
System.out.println("=========进⾏map之后=============");
Arrays.stream(arr).map(a -> a+5).forEach(System.out::println);
System.out.println("=========原数组=============");
Arrays.stream(arr).forEach(System.out::println);
6, boolean allMatch(Predicate<? super T> predicate) 判断流中的元素是否全部满⾜predicate表达式
//boolean  allMatch(Predicate<? super T> predicate)  判断流中的元素是否全部满⾜predicate表达式
// true 全部满⾜  false: 不全部满⾜
//判断学⽣集合是否都是⼤于20岁
boolean  rs = list.stream().allMatch(o-&Age()>=20);
System.out.println(rs);
7 , boolean anyMatch(Predicate<? super T> predicate) 判断流中的元素是否有满⾜predicate表达式条件的// true 有  false: 没有
boolean  rs1 = list.stream().anyMatch(o-&Age()>=20);
System.out.println(rs1);
8 , boolean noneMatch(Predicate<? super T> predicate) 与allMath相反 true 都不满⾜ false 都满⾜
boolean  rs2 = list.stream().noneMatch(o-&Age()>=20);
System.out.println(rs2);
9 , 其他⽅法如下
//long count() 返回此流中的元素数。
System.out.println(list.stream().filter(o-&Age()>=20).count());
System.out.println("===============================");
//Optional findFirst() 返回描述此流的第⼀个元素的Optional如果流为空,则返回⼀个空的Optional 。
Student stu = list.stream().filter(o-&Age()>=20).findFirst().get();
filter过滤对象数组System.out.println(stu);
//void forEach(Consumer<? super T> action)  对此流的每个元素执⾏操作。
//Optional<T> max(Comparator<? super T> comparator) 根据提供的 Comparator返回此流的最⼤元素。
//获取年龄最⼤的学⽣  Comparatorparing(Student::getAge)  排序的⽅式,以哪个属性进⾏排序
Student  maxStu = list.stream().max(Comparatorparing(Student::getAge)).get();
System.out.println(maxStu);
//Optional<T> min(Comparator<? super T> comparator) 根据提供的 Comparator返回此流的最⼩元素。
//学号最少的
Student  minStu = list.stream().min(Comparatorparing(Student::getId)).get();
System.out.println(minStu);
//把流中的元素保存到⼀个集合(list/set/map)中
//<R,A> R collect(Collector<? super T,A,R> collector)
List<Student> list2 = list.stream().filter(o-&Age()>=20).List());
//Optional<T> reduce(BinaryOperator<T> accumulator) 使⽤ associative累积函数对此流的元素执⾏ reduction ,并返回描述减⼩值的 Optional (如果有)。//T reduce(T identity, BinaryOperator<T> acc
umulator)
//获取学⽣总年龄  list.stream().map(o-&Age())  得到的是所有学⽣的年龄
//list.stream().map(o-&Age()).forEach(System.out::println);
//reduce(Integer::sum)  累加和的初始值: 0
int sum = list.stream().map(o-&Age()).reduce(Integer::sum).get();
System.out.println(sum);
int sum2 = list.stream().map(o-&Age()).reduce(100,Integer::sum);
System.out.println(sum2);
//filter()  map()  构建⼀个新的Stream
// count() 流中元素个数    max()  min() 得到最⼤,最⼩值
//collect() 把Stream中的元素变成集合

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。