StreamAPI
参考https://blog.csdn.net/y_k_y/article/details/84633001,仅自己学习记录,可劝删
Stream是用函数式编程在集合类上进行复杂操作的工具
一、流的生成方法
1.Collection接口的stream()
2.静态的stream.of
3.Arrays.stream
4.Stream.generate()方法生成无限流
...
二、流的中间操作
筛选
1 .filter()
ArrayList<Apple> apples = new ArrayList<>(); apples.add(new Apple(23,"lin")); apples.add(new Apple(42,"z")); apples.add(new Apple(44,"zhu")); apples.add(new Apple(40,"xiao")); apples.add(new Apple(17,"lin")); apples.add(new Apple(31,"z")); apples.add(new Apple(25,"xiao")); apples.add(new Apple(8,"z")); apples.add(new Apple(35,null)); List<Apple> appleList = apples.stream().filter(x -> x.getName() != null).collect(Collectors.toList()); appleList.forEach(System.out::println);
limit(n) 获取n个元素
skip(n) 跳过n元素
distinct():通过流元素的hashCode()和equals()去除重复元素
2.映射
map() :转换元素的值 会映射到每一个元素 生成新元素
map映射到每个元素对应的结果
List<Integer> integerList = apples.stream().map(Apple::getWeight).collect(Collectors.toList()); integerList.forEach(System.out::println);
3.排序
sorted():自然排序和自定义排序
public class Test { public static void main(String[] args) { ArrayList<Apple> apples = new ArrayList<>(); apples.add(new Apple(23,"lin")); apples.add(new Apple(42,"z")); apples.add(new Apple(44,"zhu")); apples.add(new Apple(40,"xiao")); apples.add(new Apple(17,"lin")); apples.add(new Apple(31,"z")); apples.add(new Apple(25,"xiao")); apples.add(new Apple(8,"z")); apples.add(new Apple(35,null)); List<Integer> list = apples.stream().map(Apple::getWeight).collect(Collectors.toList()); //自然排序 List<Integer> appleList = list.stream().sorted().collect(Collectors.toList()); appleList.forEach(System.out::println); //自定义排序 List<Apple> apples1 = apples.stream().sorted(Comparator.comparing(Apple::getWeight)).collect(Collectors.toList()); apples1.forEach(System.out::println); } }
4.消费
peek:如同于map,能得到流中的每一个元素。但map接收的是一个Function表达式,有返回值;而peek接收的是Consumer表达式,没有返回值