JavaStream(筛选)学习
Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进⾏的操作,可以执⾏⾮常复杂的查、过滤和映射数据等操作。使⽤Stream API对集合数据进⾏操作,就类似于使⽤SQL执⾏的数据库查询。也可以使⽤Stream API来并⾏执⾏操作。简⽽⾔
之,Stream API提供了⼀种⾼效且易于使⽤的处理数据的
流(Stream)到底是什么?
是数据渠道,⽤于操作数据源(集合、数组等)所⽣成的元素序列。
“集合讲的是数据,流讲的是计算”
注意:
1. Stream ⾃⼰不会存储元素。
2. Stream 不会改变源对象。相反,他们会返回⼀个持有结果的新Stream。
3. Stream 操作是延迟执⾏的。这意味着他们会等到需要结果的时候才执⾏。
创建Stream
//创建Stream
@Test
public void test1(){
//1.可以通过Collection系列集合提供的stream()或parallelStream()
List<String> list=new ArrayList<>();
Stream<String> stream1=list.stream();
Stream<String> stream2=list.parallelStream();
//2.通过Arrays中的静态⽅法stream()获取数组流
Employee[] employees=new Employee[10];
Stream<Employee> stream3=Arrays.stream(employees);
/
/3.通过Stream类中的静态⽅法of()
Stream<String> stream4=Stream.of("aa","bb","cc");
//4.创建⽆限流
//迭代
Stream<Integer> stream5=Stream.iterate(0,(x)->x+2);
stream5.forEach(System.out::println);
}
Stream的中间操作
多个中间操作可以连接起来形成⼀个流⽔线,除⾮流⽔线上触发终⽌操作,否则中间操作不会执⾏任何的处理。⽽在终⽌操作是⼀次性全部处理,称为“惰性求值”。
筛选与切⽚的⽅法:
⽅法描述
java stream
filter(Predicate p)接收Lambda,从流中排除某些元素。
dictinct()筛选,通过流所⽣成元素的hashCode()和equals()去除重复元素limit(long maxSize)截断流,使其元素不超过给定数量。
skip(long n)跳过元素,返回⼀个扔掉了前n个元素的流。若流中元素不⾜n个,则返回⼀个空流。与limit(n)互补
⽅法演⽰
List<Employee> emps=Arrays.asList(
new Employee("张三",18,9999.99),
new Employee("李四",38,5555.99),
new Employee("王五",50,6666.99),
new Employee("赵柳",16,3333.99),
new Employee("⽥七",18,7777.99),
new Employee("⽥七",18,7777.99),
new Employee("⽥七",18,7777.99)
);
//内部迭代:迭代操作由Stream API完成
@Test
public void test1(){
//中间操作:不会执⾏任何操作
Stream<Employee> stream=emps.stream()
.filter((e)->{
System.out.println("Stream API 的中间操作");
Age()>35;
});
//终⽌操作:⼀次执⾏全部内容,即“惰性求值”
stream.forEach(System.out::println);
}
@Test
public void test2(){
emps.stream()
.filter((e)->{
System.out.println("短路!");
Sal()>5000;
})
.
limit(2)
.forEach(System.out::println);
}
@Test
public void test3(){
emps.stream()
.filter((e)-&Sal()>5000)
.skip(2)
.distinct()//实体类⼀定要重写hashCode()和equals()⽅法,才能去重.forEach(System.out::println);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论