java 常用 函数式接口_java8中提供的常用的函数式接口

Java发展到Java8之后推出了函数式编程,但是和C# 比起来晚了很多年,看上去和实际的操作,C#的函数式编程实现的更好一些,C#的lamda表达式实现起来很舒服自然。当然绝大部分归功于delegate的实现。

但是Java也向前迈进了一步,虽然lamda看起来怪怪的,是通过函数式接口实现的,归根到底Java和C#的函数式实现都是类的实现,只是C#的糖更甜一些;

在Java中系统预留了一些函数式接口;和C#中的Action和Fun类似;具体如下:

1、Predicates

predicate 是一个布尔类型的函数,该函数只有一个输入参数,predicate的接口包含了多种默认用于处理复杂的逻辑动词(and  or   negate)

Predicate predicate = (s) -> s.length() > 0;

predicate.test("foo");              // true

predicate.negate().test("foo");     // false

Predicate nonNull = Objects::nonNull;

Predicate isNull = Objects::isNull;

Predicate isEmpty = String::isEmpty;

Predicate isNotEmpty = isEmpty.negate();

2、 Functions

function 接口接收一个参数,并返回单一的结果。默认方法可以将多个函数串在一起(compse  andThen)

Function toInteger = Integer::valueOf;

Function backToString = toInteger.andThen(String::valueOf);

backToString.apply("123");     // "123

3、Suppliers

Suppliers 接口产生一个给定类型的结果,与Function不同的是,supplier没有输入参数

Supplier personSupplier = Person::new;

personSupplier.get(); // new Person

4、Consumers

Consumer 代表了在一个输入参数上需要进行的操作

Consumer greeter = (p) -> System.out.println("Hello, " + p.firstName);

greeter.accept(new Person("Luke", "Skywalker"));

5、Comparators

comparator 接口在早期的Java版本中非常著名,Java8为这个接口添加了不同的默认方法;

Comparator 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

6、Optionals

optional 不是一个函数式接口,二十一个精巧的工具接口,用来防止

NullPointerEception产生。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值