Skip to main content
 首页 » 编程设计

java 内置函数式接口

2022年07月19日136tintown

java8内置函数式接口

jdk1.8 api 包括许多内置函数式接口。一些是从原有API升级,如Comparator、Runnable等。这些接口被扩展支持lambda表达式,通过增加@FunctionalInterface注解。同时java8也提供了丰富的函数式接口,其中一些接口是来自知名的Google Guava库。下面选择一些常用接口进行说明。

Predicates

Predicates是包含一个参数的布尔值接口。其包括一些缺省方法,组合他们使用可以实现复杂的业务逻辑(如:and, or, negate)。示例代码如下:

Predicate<String> predicate = (s) -> s.length() > 0; 
  
predicate.test("foo");              // true 
predicate.negate().test("foo");     // false 
  
Predicate<Boolean> nonNull = Objects::nonNull; 
Predicate<Boolean> isNull = Objects::isNull; 
  
Predicate<String> isEmpty = String::isEmpty; 
Predicate<String> isNotEmpty = isEmpty.negate();


Functions

Functions接口接收一个参数并产生一个结果。其缺省方法通常被用来链接多个功能一起使用 (compose, andThen)。

Function<String, Integer> toInteger = Integer::valueOf; 
Function<String, String> backToString = toInteger.andThen(String::valueOf); 
  
backToString.apply("123");     // "123"


Suppliers

Suppliers接口生成一个给定类型结果。和Functions不同,其没有接收参数。

Supplier<Person> personSupplier = Person::new; 
personSupplier.get();   // new Person


Consumers

Consumers表现执行带有单个输入参数的操作。

Consumer<Person> greeter = (p) -> System.out.println("Hello, " + p.firstName); 
greeter.accept(new Person("Luke", "Skywalker"));


Comparators

Comparators是从java旧版本升级并增加了一些缺省方法。

Comparator<Person> comparator = (p1, p2) -> p1.firstName.compareTo(p2.firstName); 
  
Person p1 = new Person("John", "Doe"); 
Person p2 = new Person("Alice", "Wonderland"); 
  
comparator.compare(p1, p2);             // > 0 
comparator.reversed().compare(p1, p2);  // < 0



本文参考链接:https://blog.csdn.net/neweastsun/article/details/53165165
阅读延展