一、Lambda表达式
Java 8中新增的Lambda表达式,可以使代码更加简洁易懂,提高开发效率。下面是一个对比:
// Java 7写法 List list = Arrays.asList(1,2,3,4,5,6); Collections.sort(list, new Comparator(){ public int compare(Integer a, Integer b){ return b - a; } }); // Java 8写法 List list = Arrays.asList(1,2,3,4,5,6); Collections.sort(list, (a, b) -> b - a);
第一个例子中,实现了一个简单的倒序排序,需要自己编写一个Comparator类的实现。而在第二个例子中,这个过程就被简化了,使用了Lambda表达式。
二、函数式接口
在Lambda表达式中,我们需要使用接口来定义行为。Java 8中提供了函数式接口的概念,即只有一个抽象方法的接口。下面是一个例子:
@FunctionalInterface interface FuncInterface { void execute(String str); } public static void main(String[] args) { FuncInterface funcInterface = str -> System.out.println(str); funcInterface.execute("Hello World!"); }
在函数式接口之前,我们需要创建一个匿名内部类来实现这个接口。在Java 8中,使用Lambda表达式可以创建一个该接口的实例。
三、Stream API
Java 8中加入了Stream API,这是Java中处理集合的一种新方式。其优点在于可以使用一些高阶函数(filter、map、reduce等)对集合进行操作,大大简化了代码的编写。下面是一个例子:
List list = Arrays.asList("Java", "Python", "C++", "JavaScript", "Ruby"); // 过滤出长度大于3的字符串并转为大写 List result = list.stream().filter(s -> s.length() > 3). map(String::toUpperCase). collect(Collectors.toList());
在这个例子中,我们使用了filter、map两个高阶函数对集合进行操作。最后,使用collect方法将操作结果转为一个List对象。
四、Optional类型
在Java 8中,新增了Optional类型,它可以用来处理空值的问题。在操作中,如果传入的对象为空,就直接返回一个空的Optional对象,而不是抛出NullPointerException异常。下面是一个例子:
Optional optional = Optional.ofNullable(1); optional.ifPresent(System.out::println); // 输出1 Optional optional2 = Optional.ofNullable(null); optional2.ifPresent(System.out::println); // 不输出任何内容
在这个例子中,我们使用ofNullable方法构造一个Optional对象。当Optional对象不为空时,即可使用ifPresent方法打印其值。
五、新的日期/时间API
Java 8中对日期/时间API进行了更新,使用起来更加方便。下面是一个例子:
LocalDate date = LocalDate.parse("2019-02-28"); date = date.plusDays(1); System.out.println(date); // 输出2019-03-01
在这个例子中,我们使用LocalDate类对日期进行操作。首先使用parse方法将字符串转为日期类型,然后使用plusDays方法增加一天,最后使用toString方法将日期转为字符串输出。
原创文章,作者:IDXDM,如若转载,请注明出处:https://www.506064.com/n/330802.html