Java 8教程

Java 8徽标

一系列Java 8技巧和示例,希望您喜欢它。

常见问题

一些常见问题。

1.功能界面

Java 8引入了@FunctionalInterface ,这是一个只有一种抽象方法的接口。 编译器会将满足功能接口定义的所有接口视为功能接口; 这意味着@FunctionalInterface批注是可选的。

让我们看一下六个基本功能接口。

接口 签名 例子
UnaryOperator<T> T apply(T t) String::toLowerCaseMath::tan
BinaryOperator<T> T apply(T t1, T t2) BigInteger::addMath::pow
Function<T, R> R apply(T t) Arrays::asListInteger::toBinaryString
Predicate<T, U> boolean test(T t, U u) String::isEmptyCharacter::isDigit
Supplier<T> T get() LocalDate::nowInstant::now
Consumer<T> void accept(T t) System.out::printlnError::printStackTrace

2. Lambda表达式和方法引用

Java 8引入了lambda表达式,以提供功能接口的抽象方法的实现。

进一步阅读>>> Java 8 Lambda:比较器示例

查看JDK Iterable类,它具有default方法forEach()来接受功能接口Consumer

Iterable.java
public interface Iterable<T> {

    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

   //...
}

首先,我们可以提供一个匿名类作为forEach实现。

List<String> list = Arrays.asList("node", "java", "python", "ruby");
list.forEach(new Consumer<String>() {       // anonymous class
    @Override
    public void accept(String str) {
        System.out.println(str);
    }
});

另外,我们可以使用lambda表达式来缩短代码,如下所示:

List<String> list = Arrays.asList("node", "java", "python", "ruby");
list.forEach(str -> System.out.println(str)); // lambda expressions

为了获得更好的可读性,我们可以将lambda表达式替换为方法引用。

List<String> list = Arrays.asList("node", "java", "python", "ruby");
list.forEach(System.out::println);           // method references

进一步阅读>>> Java 8方法参考,双冒号(::)运算符

注意
lambda表达式或方法引用都不执行任何操作,只是对现有方法的另一种调用。 使用方法参考,可以获得更好的可读性。

3.流

4.新的日期时间API

在过去,我们使用DateCalendar API来表示和操作日期。

  • java.util.Date日期和时间,使用默认时区打印。
  • java.util.Calendar –日期和时间,更多操作日期的方法。
  • java.text.SimpleDateFormat –格式化(日期->文本),解析(文本->日期)日期和日历。

Java 8在java.time包中创建了一系列新的日期和时间API。 ( JSR310,并受Joda-time的启发)。

  • java.time.LocalDate没有时间的日期,没有时区。
  • java.time.LocalTime没有日期的时间,没有时区。
  • java.time.LocalDateTime日期和时间,无时区。
  • java.time.ZonedDateTime日期和时间,带时区。
  • java.time.DateTimeFormatter –格式化(日期->文本),解析(文本->日期)。
  • java.time.Instant –机器的日期和时间,自Unix纪元时间(UTC 1970年1月1日午夜)起经过的秒数
  • java.time.Duration –以秒和纳秒为单位测量时间。
  • java.time.Period –以年,月和日为单位来度量时间。
  • java.time.TemporalAdjuster调整日期。
  • java.time.OffsetDateTime – {更新我}

例子…

5. Java 8技巧

安装

参考文献

翻译自: https://mkyong.com/tutorials/java-8-tutorials/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值