Java8中部分新特性详述(2)

方法引用可以被看做仅仅调用特定方法情形下的Lambda的一种快捷写法。它表示,如果一个Lambda表达式代表的只是直接调用这个方法,那最好还是用名称来调用它,而不是去描述如何调用它。

示例:

(Apple a)->a.getWeight()  等价于方法引用的 Apple::getWeight

(str,i)->str.substring(i) 等价于string::substring

如何构建方法引用:

指向静态方法的方法引用:

指向任意类型的实例方法的方法引用

指向现有对象的实例方法的方法引用 

构造函数引用

对于一个现有构造函数,可以利用它的名称和关键字new来创建它的一个引用ClassName::new

Supplier<Apple> c1= Apple::new; Apple a1=c1.get(); Function<Integer,Apple> c2=Apple::new; Apple a2=c2.apply(110); BiFunction<String,Integer,Apple> c3=Apple::new; Apple a3=c3.apply(“green”,110);

三、Stream

1.Stream的概念简析

流(Stream)是Java API的新成员,允许你以声明性方法处理数据集合(在一定程度上有点类似于SQL语句),它表示的是要做什么,而不是怎么做。此外,它还可以透明的并行处理。

下面先就展现一个流的示例写法:

List<String> threeHighCaloricDishNames = menu.stream()
        //筛选
        .filter(dish -> dish.getCalories()>500)
        //排序,降序
        .sorted(comparing(Dish::getCalories).reversed())
        //转换
        .map(Dish::getName)
        //限制输出为3个
        .limit(3)
        //将流转换为集合
        .collect(Collectors.toList());
System.out.println(threeHighCaloricDishNames);

上述代码完成了下述操作:

获取一个数据源(source)→ 数据转换→执行操作获取想要的结果

这里我们将数据转换中的操作称为中间操作,最后的执行操作获得想要的结果称作终端操作。

2.Stream的基本操作

以下是一些常见的中间操作和终端操作

中间操作

操作

 

返回类型

 

操作参数

 

函数描述符

 

filter

 

Stream<T>

 

Predicate<T>

 

T->boolean

 

map

 

Stream<R>

 

Function<T,R>

 

T->R

 

faltmap

 

Stream<R>

 

Function<T,R>

 

T->Stream<R>

 

limit

 

Stream<T>

     

sorted

 

Stream<T>

 

Comparator<T>

 

(T,T)->int

 

distinct

 

Stream<T>

     

终端操作

操作

 

返回类型

 

目的

 

forEach

 

void

 

消费流中的每个元素并对其应用Lambda。

 

count

 

long

 

返回流中的元素个数

 

collect

 

根据目的决定

 

把流规约成一个集合,如List、Map、Set甚至是Integer。

 

anyMatch

 

boolean

 

检查流中是否有所有元素能匹配给定的谓词

 

anyMatch

 

boolean

 

检查流中是否有一个元素能匹配给定的谓词

 

findAny

 

Optional<T>

 

查找到任一个匹配给定谓词的元素

 

findFirst

 

Optional<T>

 

查找到第一个匹配给定谓词的元素

 

reduce

 

Optional<T>

 

将流中所有元素组合起来,完成指定的操作,如求和、求积、求最大值、最小值等

 

注意点:

每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c2e1f2ed3c91e65ec0389d616180a264.html