静宁门户网站,网站301定向,专业网站制作公司采用哪些技术制作网站?,鞍山市建设局网站JAVA8
Lambda 表达式
(parameters) - expression 或 (parameters) -{ statements; }
提供了一种更为简洁的语法#xff0c;尤其适用于函数式接口。相比于传统的匿名内部类#xff0c;Lambda 表达式使得代码更为紧凑#xff0c;减少了样板代码的编写。 它允许将函…JAVA8
Lambda 表达式
(parameters) - expression 或 (parameters) -{ statements; }
提供了一种更为简洁的语法尤其适用于函数式接口。相比于传统的匿名内部类Lambda 表达式使得代码更为紧凑减少了样板代码的编写。 它允许将函数当作参数传递给方法或者将函数作为返回值这种支持使得 Java 在函数式编程方面更为灵活能够更好地处理集合操作、并行计算等任务。
// 传统的匿名内部类
Runnable runnable1 new Runnable() {Overridepublic void run() {System.out.println(Hello World!);}
};// 使用 Lambda 表达式
Runnable runnable2 () - System.out.println(Hello World!);方法引用
构造器引用它的语法是Class::new或者更一般的Class T ::new实例如下
final Car car Car.create( Car::new );
final List Car cars Arrays.asList( car );静态方法引用它的语法是Class::static_method实例如下
cars.forEach( Car::collide );特定类的任意对象的方法引用它的语法是Class::method实例如下
cars.forEach( Car::repair );特定对象的方法引用它的语法是instance::method实例如下
final Car police Car.create( Car::new );
cars.forEach( police::follow );函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法但是可以有多个非抽象方法的接口。 函数式接口可以被隐式转换为 lambda 表达式。 Lambda 表达式和方法引用实际上也可认为是Lambda表达式上。 如定义了一个函数式接口如下
FunctionalInterface
interface GreetingService
{void sayMessage(String message);
}那么就可以使用Lambda表达式来表示该接口的一个实现(注JAVA 8 之前一般是用匿名类实现的)
GreetingService greetService1 message - System.out.println(Hello message);import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;public class Java8Tester {public static void main(String args[]){ListInteger list Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);// PredicateInteger predicate n - true// n 是一个参数传递到 Predicate 接口的 test 方法// n 如果存在则 test 方法返回 trueSystem.out.println(输出所有数据:);// 传递参数 neval(list, n-true);// PredicateInteger predicate1 n - n%2 0// n 是一个参数传递到 Predicate 接口的 test 方法// 如果 n%2 为 0 test 方法返回 trueSystem.out.println(输出所有偶数:);eval(list, n- n%2 0 );// PredicateInteger predicate2 n - n 3// n 是一个参数传递到 Predicate 接口的 test 方法// 如果 n 大于 3 test 方法返回 trueSystem.out.println(输出大于 3 的所有数字:);eval(list, n- n 3 );}public static void eval(ListInteger list, PredicateInteger predicate) {for(Integer n: list) {if(predicate.test(n)) {System.out.println(n );}}}
}以上这个示例代表 使用n-true 实现PredicateInteger predicate的接口函数此函数返回值作为eval方法的第二个参数参与下面方法体的执行。
Java 8 接口默认方法
默认方法就是接口可以有实现方法而且不需要实现类去实现其方法。 我们只需在方法名前面加个 default 关键字即可实现默认方法。加static实现静态方法。 即不需要定义这个接口的实现类就可以直接使用该接口的方法
Stream流
数据源集合数组I/O channel 产生器generator 等 聚合操作类似SQL语句一样的操作 比如filter, map, reduce, find, match, sorted等。
生成流
stream() − 为集合创建串行流。parallelStream() − 为集合创建并行流。
Collectors Collectors 类实现了很多归约操作例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串
ListStringstrings Arrays.asList(abc, , bc, efg, abcd,, jkl);
ListString filtered strings.stream().filter(string - !string.isEmpty()).collect(Collectors.toList());System.out.println(筛选列表: filtered);
String mergedString strings.stream().filter(string - !string.isEmpty()).collect(Collectors.joining(, ));
System.out.println(合并字符串: mergedString);日期API
java.time包 LocalDate/LocalTime/LocalDateTime 和 ZonedDateTime // 获取当前的日期时间LocalDateTime currentTime LocalDateTime.now();System.out.println(当前时间: currentTime);LocalDate date1 currentTime.toLocalDate();System.out.println(date1: date1);Month month currentTime.getMonth();int day currentTime.getDayOfMonth();int seconds currentTime.getSecond();System.out.println(月: month , 日: day , 秒: seconds);LocalDateTime date2 currentTime.withDayOfMonth(10).withYear(2012);System.out.println(date2: date2);// 12 december 2014LocalDate date3 LocalDate.of(2014, Month.DECEMBER, 12);System.out.println(date3: date3);// 22 小时 15 分钟LocalTime date4 LocalTime.of(22, 15);System.out.println(date4: date4);// 解析字符串LocalTime date5 LocalTime.parse(20:15:30);System.out.println(date5: date5);}// 获取当前时区时间日期ZonedDateTime date1 ZonedDateTime.parse(2015-12-03T10:15:3005:30[Asia/Shanghai]);System.out.println(date1: date1);ZoneId id ZoneId.of(Europe/Paris);System.out.println(ZoneId: id);ZoneId currentZone ZoneId.systemDefault();System.out.println(当期时区: currentZone);Optional 类 Nashorn, JavaScript 引擎 Base64
略
JAVA9
Stream API
takeWhile 方法
default StreamT takeWhile(Predicate? super T predicate)takeWhile() 方法使用一个断言作为参数返回给定 Stream 的子集直到断言语句第一次返回 false。如果第一个值不满足断言条件将返回一个空的 Stream。 takeWhile() 方法在有序的 Stream 中takeWhile 返回从开头开始的尽量多的元素在无序的 Stream 中takeWhile 返回从开头开始的符合 Predicate 要求的元素的子集。
import java.util.stream.Stream;public class Tester {public static void main(String[] args) {Stream.of(a,b,c,,e,f).takeWhile(s-!s.isEmpty()).forEach(System.out::print); }
}dropWhile 方法 和 takeWhile 作用相反的使用一个断言作为参数直到断言语句第一次返回 false 才返回给定 Stream 的子集。
iterate 方法
static T StreamT iterate(T seed, Predicate? super T hasNext, UnaryOperatorT next)方法允许使用初始种子值创建顺序可能是无限流并迭代应用指定的下一个方法。 当指定的 hasNext 的 predicate 返回 false 时迭代停止。
java.util.stream.IntStream;public class Tester {public static void main(String[] args) {IntStream.iterate(3, x - x 10, x - x 3).forEach(System.out::println);}
}ofNullable 方法
static T StreamT ofNullable(T t)ofNullable 方法可以预防 NullPointerExceptions 异常 可以通过检查流来避免 null 值。 如果指定元素为非 null则获取一个元素并生成单个元素流元素为 null 则返回一个空流。
集合工厂方法
新方法创建集合 Java 9 中以下方法被添加到 ListSet 和 Map 接口以及它们的重载对象。
static E ListE of(E e1, E e2, E e3);
static E SetE of(E e1, E e2, E e3);
static K,V MapK,V of(K k1, V v1, K k2, V v2, K k3, V v3);
static K,V MapK,V ofEntries(Map.Entry? extends K,? extends V... entries)私有接口方法
在 Java 9 中一个接口中能定义如下几种变量/方法 常量 抽象方法 abstract(不写方法体) 默认方法 default 静态方法 static 私有方法 private 私有静态方法 private static
进程API
ProcessHandle 接口来增强 java.lang.Process 类对本地进程的支持