一系列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 UnaryOperator示例
- Java 8谓词示例
- Java 8 BiPredicate示例
- Java 8 Consumer示例
- Java 8 BiConsumer示例
- Java 8供应商示例
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.流
- Java 8 Streams过滤器示例
- Java 8 Streams map()示例
- Java 8 flatMap示例
- Java 8并行流示例
- Java 8 Stream.iterate示例
- Java 8 Stream Collectors分组通过示例
- Java 8从流中过滤空值
- Java 8将流转换为列表
- Java 8 Stream findFirst()和findAny()
- Java 8 Stream.reduce()示例
- Java 8将流转换为列表
- Java 8如何使用Stream求和BigDecimal?
- Java 8 Stream –逐行读取文件
- Java 8流–将List <List <String >>转换为List <String>
- Java 8 Stream – peek()不能与count()一起使用?
- Java 8使用后是否应该关闭Stream?
- Java 8将流转换为数组
- Java 8如何将IntStream转换为Integer数组
- 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在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
– {更新我}
例子…
- Java –如何获取当前日期时间
- Java –如何获取当前时间戳
- Java –如何将字符串转换为日期
- Java 8 –持续时间和期间示例
- 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”(1月2日)解析日期而没有年份?
- Java 8 –将LocalDate和LocalDateTime转换为日期
- Java 8 –无法从TemporalAccessor获取LocalDateTime
- Java 8 –将ZonedDateTime转换为时间戳
- Java –显示所有ZoneId及其UTC偏移量
- Java 8 –将LocalDateTime转换为时间戳
- Java –如何更改字符串中的日期格式
- 检查日期是否大于6个月
- Java –如何比较日期
- Java –如何计算经过时间
- Java 8 – MinguoDate示例(台湾日历)
- 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>转换为String
- Java –如何打印金字塔
- Java –检查Array是否包含某个值?
- Java –如何加入数组
- Java –生成范围内的随机整数
- Java –如何将名称打印10次?
- Java –如何在列表中搜索字符串?
- Java –如何从Map获取键和值
- Java –将文件转换为字符串
- Java –将数组转换为ArrayList
- Java –如何检查字符串是否为数字
- Java –如何用逗号连接列表字符串
- Java –将逗号分隔的字符串转换为列表
- Java Prime Numbers示例
- 如何告诉Maven使用Java 8
- java.lang.UnsupportedClassVersionError
- Java Fibonacci示例
- 如何在Java中循环映射
- Java正则表达式示例
- 如何用Java读取文件– BufferedReader