筛选与切片
filter 过滤
可以通过filter方法将一个流转换成另一个子集流。方法声明:
Stream<T> filter(Predicate<? super T> predicate);
该接口接收一个Predicate函数式接口参数(可以是一个Lambda)作为筛选条件。
常见的使用方法如下:
比如我们现在需要过滤获得姓名开头是张的元素
public class Demo16StreamFilter {public static void main(String[] args) {Stream<String> original = Stream.of("张无忌", "张三丰", "周芷若");Stream<String> result = original.filter((String s) -> {return s.startsWith("张");});}}
limit 取用前几个
limit方法可以对流进行截取,只取用前面n个
如果集合当前长度大于参数则进行截取;否则不进行操作。基本使用:
import java.util.stream.Stream;public class Demo18StreamLimit {public static void main(String[] args) {Stream<String> original = Stream.of("张无忌", "张三丰", "周芷若");Stream<String> result = original.limit(2);System.out.println(result.count()); // 2}}
skip 跳过前几个
如果希望跳过前面几个元素,可以使用skip方法来获得一个截断之后的流
如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的空流。基本使用:
import java.util.stream.Stream;public class Demo19StreamSkip {public static void main(String[] args) {Stream<String> original = Stream.of("张无忌", "张三丰", "周芷若");Stream<String> result = original.skip(2);System.out.println(result.count()); // 1}}
映射
映射主要涉及到的方法就是map
映射可以把当前流元素映射成一个新的元素
比如我们可以通过map把一个员工对象流映射成员工对象的姓名流
假设我们现在需要获得员工姓名长度大于3的员工姓名
public class StreamApiTest {@Testpublic void streamApiTest(){List<String> strings = Arrays.asList("aa", "bb", "cc", "dd");Employ employ1 = new Employ(1, "yxr");Employ employ2 = new Employ(2, "zyl");Employ employ3 = new Employ(3, "zylara");Employ employ4 = new Employ(2, "yxr142748");List<Employ> list = Arrays.asList(employ1,employ2,employ3,employ4);list.stream().map(Employ::getName).filter(name -> name.length() > 3).forEach(System.out::println);}}

又或者说,我们需要把一个字符串数组里面的所有字符串都转换成大写
排序
sorted()产生一个新流,其中按照自然排序排序sorted(Comparator comparator)产生一个新流,其中按比较器规定的顺序排序
自然排序
假设我们需要对一个数组中的所有数字按照从小到大的顺序排序,那么我们可以直接调用自然排序方法
@Testpublic void test4(){List<Integer> list = Arrays.asList(12, 141, 123125, 123, 526, 242);list.stream().sorted().forEach(System.out::println);}

比较器排序
有时候我们需要排序的对象并不像是只有数字这么简单,假设我们现在需要对员工进行排序,排序的规则是先按照年龄降序排序,如果年龄相同,那么就按照薪水的高低进行排序,显然这不是自然排序所能做到的,就需要我们人为的编写排序的比较器
Employ.java
class Employ{private Integer id;private String name;private Integer age;private Double salary;public Employ() {}public Employ(Integer id, String name, Integer age, Double salary) {this.id = id;this.name = name;this.age = age;this.salary = salary;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Double getSalary() {return salary;}public void setSalary(Double salary) {this.salary = salary;}@Overridepublic String toString() {return "Employ{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", salary=" + salary +'}';}}


