第四章 类库

使用 summaryStatistics 方法统计曲目长度

public static void printTrackLengthStatistics(Album album) {

       IntSummaryStatistics trackLengthStats = album.getTracks()

                                                                      .mapToInt(track -> track.getLength())

                                                                      .summaryStatistics();

        System.out.println(trackLengthStats.toString());

}

结果:


IntSummaryStatistics

mapToInt 方法返回一个IntStream 对象,它包含一个summaryStatistics 方法,这个方法能计算出各种各样的统计值,如IntStream 对象内所有元素的最小值,最大值,平均值 以及数值总和。


4.3 重载解析

有两个重载方法可供选择:

private interface IntegerBiFunction extends BinaryOperator {

}

// BinaryOperator 是一种特殊的BiFunction 类型,参数的类型和返回值类型相同。

private void overloadedMethod(BinaryOperator lambda){

         System.out.println("BinaryOprator");

}

private void overloadedMethod(IntegerBiFunction lambda){

          System.out.println("IntegerBiFunction");

}

重载方法调用:

overloadedMethod((x,y) -> x+y);

Java 编译器推导出的lambda 表达式的类型是最具体的函数接口类型。因此此时输出的是:IntegerBiFunction 。

如果存在多个可能目标类型且最具体的类型不明确,则需要人为指定类型,否则会导致编译错误。


4.4 @FunctionInterface

    该注释会强制javac 检查一个接口是否符合函数接口的标准。


4.10 Optional

Optional 是为核心类库新设计的一个数据类型,用来替换null值。Optional 对象相当于值得容器,使用工厂方法of 可以从某个 值创建Optional 对象,使用get 方法可以提取该值。

Optional a = Optional.of("a");

assertEquals("a",a.get());

Optional emptyOptional = Optional.empty();

Optional alsoEmpty = Optional.ofNullable(null);

orElse(String other) 方法给空的Optional 对象提供一个备选值。

如果计算备选值太过繁琐,可以使用orElseGet(Supplier supplier) 方法,只用在Optional对象真正为空时才会调用。

assertEquals("b",emptyOptional.orElse("b"));

assertEquals("c" ,emptyOptional.orElseGet(() -> "c"));

你可能感兴趣的:(第四章 类库)