1091 字
5 分钟
JDK8新特性

JDK8新特性#

JDK5特性:

  1. 枚举 (Enum)

枚举是一种类型,在定义枚举时就指定枚举中的元素,在使用枚举时这些元素不能删除、添加。

public enum Week {
//枚举元素一定要写在枚举的第一行
Mon("星期一"),Tue("星期二"),Web("星期三"),
Thu("星期二"),Fir("星期二"),Stu("星期二"),
Sun("星期日");
private String ename;
private Week(String ename){
this.ename = ename;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
}
  1. 可变参数
public class Test {
//第二个参数是可变参数
//可变参数指定定义在最后一个参数位置,只能有一个可变参数
//调用方法时可以传入任意多个 int实参
//在方法中的可变参数实质是一个数组
public static void method(String str,int ... is){
System.out.println(str);
for(int i:is){
System.out.println(i);
}
}
public static void main(String[] args) {
method("abc",1,2,2,3,3,4,4,4,3,6,7,8);
}
}

JDK8特性#

  1. 接口中可以定义默认方法和静态方法
  2. 函数式接口

只有一个抽象方法的接口,就是函数式接口

@FunctionalInterface注解 : 起到了一个校验作用,校验修饰的接口是否符合函数式接口的语法。有点类似于@Override注解

@FunctionalInterface
public interface ITest {
default  public void method1(){
}
public void method();
}
  1. Lambada表达式

基本语法:

() -> {}

Lambada表达式是用来描述一段过程的,其实就是一个方法,定义一个方法,不需要定义方法名

new Thread(()->{
System.out.println("执行run");
}).start();

()代表方法过程的参数,参数的类型可以简化,可以推断的类型可以简化

{}中只有一行代码,且是return代码 ,{}和return都可以省略

Arrays.sort(strs,(o1,o2)->o1.length()-o2.length());

Lambabda表达式的写法非常的简介,但是编译后的代码依然是接口对象

  1. 方法引用 : 可以引用一个方法,通过一种写法表示一个方法/构造器

    ,可以将一个方法作为实参传入到另一个方法中

方法引用的写法:

类名:: 静态方法

类名:: 非静态方法

对象:: 非静态方法

方法引用作为实参的语法:

要求调用方法参数需要的接口(函数式接口)中的抽象方法接口 和 方法引用的方法结构一致 ,方法名不必相同

思想层面:某个方法需要一个过程,可以使用Lambada表达式来描述这个过程;如果有一个现有的过程可以 使用方法引用的写法传入这个过程

代码层面:函数式接口的方法结构(除了方法名)和 方法引用的方法结构相同

执行层面:编译后出入的还是函数式接口的对象

List<String> list = new ArrayList<>();
Collections.addAll(list,"ab","cd","ef");
list.forEach((s)->{
System.out.println(s);
});
list.forEach(System.out::println);
//对集合中的字符串首字母转大写并输出
System.out.println("-------------");
list.forEach(Test::upperPrintln);
public class Test {
public static void method(){
System.out.println("执行了test的method方法");
}
public static void upperPrintln(String str){
System.out.println(String.valueOf(str.charAt(0)).toUpperCase()+str.substring(1));
}
}
  1. Stream

增强了集合的聚合操作的功能,相当于一个高级的迭代器,通过迭代完成聚合操作,Stream封装了迭代的过程,提供了串行和并行两种操作模式。

  1. forEach方法:迭代方法
List<Integer> list = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//串行迭代
list.stream().forEach(System.out::println);
//并行迭代
list.parallelStream().forEach(System.out::println);
  1. map方法:对集合中的元素 通过一个映射操作 得到一个结果,后续可以对结果再次进行聚合操作(例如forEach()、size()、toList())。
public static void main(String[] args) {
List<Integer> list = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//输出集合中的数据*2的结果
list.stream().map((s)->s*2).forEach(System.out::println);
}
  1. filter方法:对集合中的元素 通过一个过滤操作 得到一个结果
  2. limit方法:对集合中的元素 进行数量的限定
//输出集合中前3个数中大于2的数字
list.stream().limit(3).filter((s)->s>2).forEach(System.out::println);
System.out.println("--------");
//输出集合中大于2的数字中的前3个数字
list.stream().filter((s)->s>2).limit(3).forEach(System.out::println);
  1. sort方法:对集合的元素 进行排序的到一个结果
//输出集合从小到大顺序中第一个大于2的数字
System.out.println("----------");
list.stream().sorted().filter((s)->s>2).limit(1).forEach(System.out::println);
  1. Collectors方法: 将结果存储到一个新的集合中
public static void main(String[] args) {
List<Integer> list = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//所有的奇数存到一个新集合中
List<Integer> list2 = list.stream().filter((s)->(s&1)==1)
.collect(Collectors.toList());
System.out.println(list2);
//用-连成字符串
List<String> list3 = Arrays.asList("a","b","c");
String str = list3.stream().collect(Collectors.joining("-"));
System.out.println(str);
}
  1. distinct方法:对结果去重
  2. count方法:结果的个数
JDK8新特性
https://mizuki.mysqil.com/posts/15jdk8新特性/
作者
SuifengFlying
发布于
2026-07-28
许可协议
CC BY-NC-SA 4.0

Java SE

13 / 13

Related articles

部分信息可能已经过时

封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00