Java 8 教程

一系列 Java 8 技巧和示例,希望您喜欢。
常见问题
一些常见的问题。
- Java 8 forEach 示例
- Java 8 将列表转换为映射
- Java 8 Lambda:比较器示例
- Java 8 方法引用,双冒号 (::) 运算符
- Java 8 Streams 过滤器示例
- Java 8 Streams map() 示例
1. 功能接口
Java 8 引入了@FunctionalInterface
,一个只有一个抽象方法的接口。编译器会将任何满足函数式接口定义的接口视为函数式接口;这意味着@FunctionalInterface
注释是可选的。
让我们看看六个基本功能接口。
界面 | 签名 | 例子 |
---|---|---|
UnaryOperator<T> | T apply(T t) | String::toLowerCase , Math::tan |
BinaryOperator<T> | T apply(T t1, T t2) | BigInteger::add , Math::pow |
Function<T, R> | R apply(T t) | Arrays::asList , Integer::toBinaryString |
Predicate<T, U> | boolean test(T t, U u) | String::isEmpty , Character::isDigit |
Supplier<T> | T get() | LocalDate::now , Instant::now |
Consumer<T> | void accept(T t) | System.out::println , Error::printStackTrace |
- Java 8 函数示例
- Java 8 BiFunction 示例
- Java 8 BinaryOperator 示例
- Java 8 一元运算符示例
- Java 8 谓词示例
- Java 8 BiPredicate 示例
- Java 8 消费者示例
- Java 8 BiConsumer 示例
- Java 8 供应商示例
2. Lambda 表达式和方法参考
Java 8 引入了 lambda 表达式来提供函数接口的抽象方法的实现。
进一步阅读 >>> Java 8 Lambda:比较器示例
查看JDKIterable
类,它有一个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. 流
- Java 8 Streams 过滤器示例
- Java 8 Streams map() 示例
- Java 8 flatMap 示例
- Java 8 并行流示例
- Java 8 Stream.iterate 示例
- Java 8 流收集器分组示例
- Java 8 从流中过滤空值
- Java 8 将流转换为列表
- Java 8 Stream findFirst() 和 findAny()
- Java 8 Stream.reduce() 示例
- Java 8 将流转换为列表
- Java 8 如何使用 Stream 对 BigDecimal 求和?
- Java 8 Stream – 逐行读取文件
- Java 8 Stream – 将 List<List<String>> 转换为 List<String>
- Java 8 Stream – peek() 不适用于 count()?
- Java 8 我们应该在使用后关闭 Stream 吗?
- Java 8 将流转换为数组
- Java 8 如何将 IntStream 转换为整数数组
- Java 8 如何将 IntStream 转换为 int 或 int 数组
- Java 8 如何使用 stream.sorted() 对列表进行排序
- Java - 如何对所有流整数求和
- Java – 如何将原始数组转换为列表
- Java – 如何将数组转换为流
- Java – Stream 已经被操作或关闭
4. 新的日期时间 API
在过去,我们使用Date
和Calendar
API来表达和处理日期。
java.util.Date
– 日期和时间,使用默认时区打印。java.util.Calendar
– 日期和时间,更多操作日期的方法。java.text.SimpleDateFormat
– 格式化(日期 -> 文本),解析(文本 -> 日期)日期和日历。
Java 8 在 package.json 中创建了一系列新的日期和时间 API java.time
。(JSR310并受 Joda-time 启发)。
java.time.LocalDate
– 没有时间的日期,没有时区。java.time.LocalTime
– 没有日期的时间,没有时区。java.time.LocalDateTime
– 日期和时间,无时区。java.time.ZonedDateTime
– 日期和时间,带时区。java.time.DateTimeFormatter
– 格式化(日期 -> 文本),解析(文本 -> 日期)java.time。java.time.Instant
– 机器的日期和时间,自 Unix 纪元时间(UTC 1970 年 1 月 1 日午夜)以来经过的秒数java.time.Duration
– 以秒和纳秒为单位测量时间。java.time.Period
– 以年、月和日为单位测量时间。java.time.TemporalAdjuster
– 调整日期。java.time.OffsetDateTime
- {告诉我}
例子…
- Java – 如何获取当前日期时间
- Java – 如何获取当前时间戳
- Java - 如何将字符串转换为日期
- Java 8 – Duration 和 Period 示例
- Java 8 – 如何将字符串转换为 LocalDate
- Java 8 – 如何格式化 LocalDateTime
- Java 8 – 将 Instant 转换为 LocalDateTime
- Java 8 – 将 Instant 转换为 ZoneDateTime
- Java 8 – 将日期转换为 LocalDate 和 LocalDateTime
- Java 8 – ZonedDateTime 示例
- Java - 在时区之间转换日期和时间
- Java - 如何将天数添加到当前日期
- Java 8 – TemporalAdjusters 示例
- Java 8 – 将纪元时间毫秒转换为 LocalDate 或 LocalDateTime
- Java 8 – 两个 LocalDate 或 LocalDateTime 之间的区别
- Java 8 – 如何计算两个日期之间的天数?
- Java 8 – 如何用“dd MMM”(02 Jan)解析日期,没有年份?
- Java 8 – 将 LocalDate 和 LocalDateTime 转换为日期
- Java 8 – 无法从 TemporalAccessor 获取 LocalDateTime
- Java 8 – 将 ZonedDateTime 转换为时间戳
- Java - 显示所有 ZoneId 及其 UTC 偏移量
- Java 8 – 将 LocalDateTime 转换为时间戳
- Java – 如何更改字符串中的日期格式
- 检查日期是否早于 6 个月
- Java – 如何比较日期
- Java - 如何计算经过的时间
- Java 8 – MinguoDate examples (Taiwan calendar)
- Java 8 – HijrahDate,如何计算斋月日期(伊斯兰历)
- Java 日期时间教程
5. Java 8 技巧
- Java 8 可选深入
- Java 8 如何对地图进行排序
- Java 8 将列表转换为映射
- Java 8 过滤地图示例
- Java 8 将映射转换为列表
- Java 8 StringJoiner 示例
- Java 8 Math Exact 示例
- 带有索引的 Java 8 forEach 打印
- Java 8 将 Optional<String> 转换为字符串
- Java – 如何打印金字塔
- Java - 检查数组是否包含某个值?
- Java – 如何加入数组
- Java - 生成范围内的随机整数
- Java - 如何打印一个名字 10 次?
- Java – 如何在列表中搜索字符串?
- Java – 如何从 Map 中获取键和值
- Java - 将文件转换为字符串
- Java – 将数组转换为 ArrayList
- Java - 如何检查字符串是否为数字
- Java – 如何用逗号连接列表字符串
- Java - 将逗号分隔的字符串转换为列表
- Java素数示例
- 如何告诉 Maven 使用 Java 8
- java.lang.UnsupportedClassVersionError
- Java 斐波那契示例
- 如何在 Java 中循环映射
- Java 正则表达式示例
- 如何在 Java 中读取文件 – BufferedReader