Java8新特性之函数式接口

导读:本篇文章讲解 Java8新特性之函数式接口,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

《Java 8 实战》学习笔记系列

定义

函数式接口只定义一个抽象方法,可以有多个默认方法
函数式接口的接口名上,会被@FunctionalInterface标注

作用

函数式接口的方法可以应用在Lambda表达式,例如Comparable、 Runnable和Callable等,
这种抽象方法被称为函数描述符

示例

比较器

java.util.Comparator
public interface Comparator<T> {
	int compare(T o1, T o2);
}

可以写成

Comparator<Apple> c = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

参数可以进一步省略

Comparator<Apple> c = (a1, a2) -> a1.getWeight().compareTo(a2.getWeight());

线程
Runnable

public interface Runnable{
	void run();
}

可以写成

(参数) -> {方法体}

新函数式接口

Predicate

@FunctionalInterface
public interface Predicate<T>{
	boolean test(T t);
}

谓词接口Predicate有一个抽象方法test,它接受泛型T对象,并返回一个boolean,可以用在筛选时判断是否符合预期

示例:
判断参数是否为空

Predicate<String> nonEmptyStringPredicate = (String s) -> !s.isEmpty();
List<String> nonEmpty = filter(listOfStrings, nonEmptyStringPredicate);

Predicate<String> p = s -> list.add(s);

Consumer

@FunctionalInterface
public interface Consumer<T>{
	void accept(T t);
}

抽象方法accept,它接受泛型T的对象,没有返回( void),可以用在调用无返回的方法

示例:
逐条打印数据

Consumer<String> b = s -> list.add(s);

Function

@FunctionalInterface
public interface Function<T, R>{
	R apply(T t);
}

抽象方法apply,接受一个泛型T的对象,并返回一个泛型R的对象,可用作转换类型
示例:

Function<String, Integer> stringToInteger =
(String s) -> Integer.parseInt(s);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93762.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!