day13【Stream流、方法引用】

主要内容
  • Stream流
  • 方法引用

1 Stream流

JDK1.8+出现,关注做什么,而不是怎么做

1.1 流程式思想

  • 对一组数据进行多过滤,筛选,统计…
  • Stream流并不会存储元素,流对象只能被消费一次
  • 只能内部迭代遍历
  • Stream流是一个来自数据源的元素队列并支持聚合操作
  • 数据源:可以是集合或数组等等.

1.2 获取流

Collection集合都可以通过stream默认方法获取流
List<String> list = new ArrayList<>();
Stream<String> stream1 = list.stream();

Stream接口静态方法of可以获取数组对应的流
String[] array = { "张无忌", "张翠山", "张三丰", "张一元" };
Stream<String> stream = Stream.of(array);

of方法的参数是一个可变参数,所以支持数组

1.3 常用方法

  • 延迟方法:返回值类型仍然是Stream自身,支持链式调用
过滤:fiter
Stream<T> filter(Predicate<? super T> predicate)

映射(转换):map
<R> Stream<R> map(Function<? super T, ? extends R> mapper);

取用前几个:limit
Stream<T> limit(long maxSize);

跳过前几个:skip
Stream<T> skip(long n);

组合:concat
static <T> Stream<T> concat(Stream<? extends T> a,Stream<? extends T> b)
  • 终结方法:返回值不再是Stream,不支持链式,相当于流水线的开关。
遍历:forEach
void forEach(Consumer<? super T> action)

统计个数:count
long count();
  • 扩展
将元素存储到数组
String[] str = Stream.of().toArray(String[]::new)

将元素存储到集合
List<T> list = Stream.of().collect(Collectors.toList());

2 方法引用

  • 如果Lambda表达式仅仅是调用一个已经存在的方法, 那就可以通过方法引用来替代Lambda表达式
    作用::简化Lambda表达式
    :: :方法引用运算符, 它所在的表达式被称为方法引用
  • Lambda表达式写法:
    (String s) -> System.out.println(s)
    参数传递给System.out.println()方法去打印
  • 方法引用写法:
    System.out::println
    用System.out.println()方法中代码, 来作为Lambda中重写方法的实现方式

注意:
Lambda中传递的参数一定是方法引用中的那个方法可以接收的类型,否则会抛出异常

方法引用能简化以下场景: (方法名后不要写小括号)
  1. 通过对象名引用成员方法
    对象名::成员方法名
    System.out::println
  2. 通过类名引用静态方法
    类名::静态方法名
    i -> Math.abs(i)
    Math::abs
  3. 通过super引用父类成员方法
    super::父类方法名
    ()->super.eat();
    super::eat
  4. 通过this引用本类成员方法
    this::本类方法名
    ()->this.eat();
    this::eat
  5. 引用某个类的构造方法
    类名::new
    name->new Person(name)
    Person::new
  6. 引用创建数组的方法
    数据类型[]::new
    length->new int[length];
    int[]::new
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值