Stream用法

  • 1.对于List可以调用.stream()方法开启流.
  • 2.对stream过滤调用.filter()方法,参数传递过滤的条件,可用lambda表达式.
  • 3.对于统计可直接在stream后调用.count()方法获取统计个数.
  • 4.对于排序操作可在stream后调用.sorted()方法,参数传递排序的条件,如Comparator.comparingInt(User::getAge),默认从小到大,接着调用.reversed()方法可反转排序条件.
  • 5.在操作结束时调用.collect()方法可获取处理结果,参数传递需要接受的返回参数类型,如Collectors.toList()可以获取一个List结果,Collectors.toCollection(LinkedList::new)可以获取一个LinkedList结果.
  • 6.如果需要对操作对象进行转化,可在stream后调用.map()方法,参数传递类型转化的条件,如map(User::getName)可以获取List中的Name.
  • 7.如果要操作的对象是String,调用String的chars()方法,可以将String转化为一个IntStream后,进行stream处理.
  • 8.对操作的对象分组调用.collect(Collectors.groupingBy()),参数传递分组的条件;同时需要分组+排序时,可以先排序再分组.
  • 9.stream的处理结果可以获取map类型的返回数据,在collect()中传递Collectors.toMap()方法,toMap的参数为需要映射/转换的数据类型,如toMap(Order::getId, order -> order).
  • 10.将stream的元素连接在一起,可以在.collect() 中调用Collectors.joining(),参数传递连接的符号,如,.
  • 11.诸如List<List<>>->List<>这样的转换可以用stream.flatMap(List::stream).collect(toList())来实现
  • 12.boolean anyMatch(Predicate<? super T> predicate)只要有一个条件满足即返回true;
    boolean allMatch(Predicate<? super T> predicate)必须全部都满足才会返回true;
    boolean noneMatch(Predicate<? super T> predicate)全都不满足才会返回true
  • 13.