Java LTS(长期支持版本),目前最新的有Java8,Java11,Java17。

今天来总结一下Java8版本中主要的新特性。供大家学习参考

  • Lambda表达式
  • Stream流 API
  • Foreach 方法
  • 日期时间API
  • Noshorn JavaScript 引擎
  • 方法引用
  •  StringJoiner

1.Lamba表达式

Lamba表达式是一个匿名的函数,可以通过像函数式编程的方式一样写代码。Lamba表达式能极大的简化我们的代码。

常见的写法:

不需要参数,返回10
()->10
传入一个参数,返回a的平方
(a)->a*a
传入两个参数,并且返回它们的和
(a,b)->a+b
没有返回值的
(s)->System.out.println(s)

最常见的就是创建线程的写法:

public static void main(String[] args) {

        Runnable run1=new Runnable() {
            @Override
            public void run() {
                System.out.println("thread1 is running!");
            }
        };
        Runnable run2=()->{
            System.out.println("thread2 is running!");
        };
        Thread t1=new Thread(run1);
        Thread t2=new Thread(run2);
        t1.start();
        t2.start();
    }

java lts java ltsm_java lts

 2. Stream流 API

Stream流API提供了数据过滤,提取,转换的方法。和之前的InputStream流完全没有关系,Stream流是对管道中数据的处理。Stream流的数据来自集合,数组,I/O channel,产生器generator等,简化了Java集合的编程。

常用的操作:

filter(lambda):从流中排除某些元素

distinct():从流中去除重复的元素

limit(long maxsize):截断流,只保留给定数量的元素

skip(long n)跳过元素,返回跳过的元素流

 sorted():产生新的流,按照顺序排序

sorted(Comparator comp):按照给定的排序规则排序

toList():把流中的元素收集到List

toSet():把流中的元素收集到Set中

count():计算流中的个数

3.ForEach方法

为了迭代集合,Java8 在Iterable接口提供了一个新的ForEach方法,可以用来遍历元素集合。

public static void main(String[] args) {
        List<String> fruits= Arrays.asList("苹果","香梨","香蕉");
        fruits.forEach(System.out::println);
    }

4.接口定义增加了Default方法

interface Moveable{
    default void Sound(){
        System.out.println("calling me");
    }

}
public class LambdaExample {
    public static void main(String[] args) {
        //输出 calling me
        new Moveable(){}.Sound();
    }
}

 5.日期时间API(JSR-310)

Java8增加了新的日期时间处理API,包含在java.time包中。

6.Nashorn JavaScript 引擎

Nashorn是一个JavaScript 引擎,用来动态的执行Javascript代码,可以通过jjs命令行工具来动态执行js脚本,或者加载进Java代码中执行。

7.方法引用

方法引用可以用在函数式编程中,应该算是lambda的一种子特性。方法可以被:

  1. 构造函数
  2. 静态方法
  3. 一个实例方法

引用。例如:

class ThreadExample{
    public static String staticMethod(){
        System.out.println("初始化线程");
        return "Thread1";
    }
}

public class LambdaExample {
    public static void main(String[] args) {
        //调用了ThreadExample类的静态staticMethod方法,返回一个字符串
        Thread t=new Thread(ThreadExample::staticMethod);
        t.start();
    }
}

8.StringJoiner

用指定的连接字符串拼接字符串,例如

StringJoiner names = new StringJoiner("-"); //连接字符是 -
// 添加字符串,最终输出张三-李四
names.add("张三");
names.add("李四");
System.out.println(names.toString());