从Java8开始这个Stream<T>接口方法使用非常的广泛并且很受欢迎,其中最常见的Stream接口方法有以下这几种:
// 匹配Stream里面的所有数据是否都符合Predicate里面定义的表达式,符合则返回true,否则返回false boolean allMatch(Predicate<? super T> predicate) // 匹配Stream里面的任一条数据是否符合Predicate里面定义的表达式,符合则返回true,否则返回false boolean anyMatch(Predicate<? super T> predicate) // 匹配Stream里面的是否没有符合Predicate里面定义的表达式,没有符合则返回true,有符合则返回false boolean noneMatch(Predicate<? super T> predicate) // 过滤Stream里面的数据,相当于if语句,过滤条件是Predicate里面定义的表达式 Stream<T> filter(Predicate<? super T> predicate) // 遍历Stream里面的数据 void forEach(Consumer<? super T> action) // 按自然顺序从小到大排序Stream里面的数据 Stream<T> sorted() // 按Comparator比较器里面定义的方法来比较Stream里面的数据,适合比较对象,或者从大到小时使用 Stream<T> sorted(Comparator<? super T> comparator) // 获取Stream里面的最大数值或自定义对象 Optional<T> max(Comparator<? super T> comparator) // 获取Stream里面的最小数据或自定义对象 Optional<T> min(Comparator<? super T> comparator) |
提示:
如果不懂Predicate<? super T>接口则点击此处:了解Predicate接口的简单使用
如果不懂Comparator<? super T>比较器的使用,可以点击此处:了解Comparator的使用方法
下面是Stream<T>接口方法的使用示例代码,可以更好的了解上面这些方法的使用:
public class Children extends Parents { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("test1"); list.add("test2"); list.add("test3"); list.add("test4"); list.add("test5"); boolean res1 = list.stream().allMatch(n -> n.contains("test")); //list元素是否都包含test字符 boolean res2 = list.stream().anyMatch(n -> n.contains("5")); //是否有一个元素包含5字符 boolean res3 = list.stream().noneMatch(n -> n.contains("5")); //是否没有元素包含5字符 //结果:true===true===false System.out.println(res1 + "===" + res2 + "===" + res3); list.stream().forEach(System.out::println); //forEach表示遍历list集合 //filter表示过滤元素,是否里面有元素等于test1,如果有则返回并在Consumer里面对字符进行处理 list.stream().filter(n -> n.equals("test1")).forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s + ": test1"); //拼接输出test1: test1 } }); System.out.println("------Stream的sorted排序方法--------"); List<Integer> list2 = new ArrayList<Integer>(); list2.add(50); list2.add(20); list2.add(10); list2.add(40); list2.add(30); //按自然顺序从小到大排列 list2.stream().sorted().forEach(System.out::println); System.out.println("--------------"); //按Comparator比较器比较,从大到小排列并遍历输出 list2.stream().sorted(new Comparator<Integer>() { @Override public int compare(Integer num1, Integer num2) { return num2.compareTo(num1); } }).forEach(System.out::println); System.out.println("------Stream的max与min方法--------"); //分别获取list2里面的最大值与最小值 Integer max = list2.stream().max(Integer::compareTo).get(); Integer min = list2.stream().min(Integer::compareTo).get(); System.out.println("List2最大值:"+max+"====最小值:"+min); //根据年龄大小来获取自定义对象集合里面的最大值与最小值 List<Parents> list3 = new ArrayList<Parents>(); list3.add(new Parents("张三",40)); list3.add(new Parents("李四",20)); list3.add(new Parents("王五",60)); list3.add(new Parents("赵六",46)); list3.add(new Parents("李白",70)); Parents maxAgeParents = list3.stream().max(Comparator.comparingInt(Parents::getAge)).get(); Parents minAgeParents = list3.stream().min(Comparator.comparingInt(Parents::getAge)).get(); //输出maxAgeParents和minAgeParents两个对象此处省略 } }
当然了,Stream接口里面还有很多非常有用的方法,这里不再列举了哦!