Java8之函数式接口

四大核心函数式接口

函数式接口参数类型返回类型使用场景
Consumer 消费型接口TVoid对类型为 T 的对象应用操作,接口定义的方法:void accept(T t)
Supplier 供给型接口T返回类型为 T 的对象,接口定义的方法:T get()
Function<T, R>函数式接口TR对类型为 T 的对象应用操作,并 R 类型的返回结果。接口定义的方法:R apply(T t)
Predicate 断言型接口Tboolean确定类型为 T 的对象是否满足约束条件,并返回boolean 类型的数据。接口定义的方法:boolean test(T t)

其他函数接口

函数式接口参数类型返回类型使用场景
BiFunction(T, U, R)T,UR对类型为 T,U 的参数应用操作,返回 R 类型的结果。接口定义的方法:R apply(T t, U u)
UnaryOperator(Function 子接口)TT对类型为 T 的对象进行一 元运算, 并返回 T 类型的 结果。 包含方法为T apply(T t)
BinaryOperator(BiFunction 子接口)T,TT对类型为 T 的对象进行二 元运算, 并返回 T 类型的 结果。 包含方法为T apply(T t1, T t2)
BiConsumer<T, U>T,UVoid对类型为 T, U 参数应用 操作。 包含方法为 void accept(T t, U u)
ToIntFunctionTint计算 int 值的函数
ToLongFunctionTlong计算 long 值的函数
ToDoubleFunctionTdouble计算 double 值的函数
IntFunctionintR参数为 int 类型的函数
LongFunctionlongR参数为 long 类型的函数
DoubleFunctiondoubleR参数为 double 类型的函数

四大核心函数式接口应用举例

Consumer接口

Consumer 接口是消费性接口,无返回值。Java8 中对 Consumer 的定义如下所示。

@FunctionalInterface
public   interface    Consumer<T>    {
	void    accept(T    t);
	default   Consumer<T>    andThen(Consumer<?    super   T>    after)    { 
		Objects.requireNonNull(after);
		return   (T    t)    ->    {   accept(t);    after.accept(t);    }; 
	}
}

使用示例

public static void handleConsumer(Consumer<Integer> consumer,Integer number){
    consumer.accept(number);
}

@Test
public void testConsumer(){
    handleConsumer(i-> System.out.println(i),100);
}

Supplier接口

Supplier 接口是供给型接口,有返回值,Java8 中对 Supplier 接口的定义如下所示。

@FunctionalInterface 
public   interface    Supplier<T>    {
   T    get(); 
}

使用示例

public static List<Integer> getList(int number, Supplier<Integer> supplier){
        List<Integer> list  = new ArrayList<>();
        for (int i=0;i<number;i++){
            list.add(supplier.get());
        }
        return list;

    }

    @Test
    public void testSupplier(){
        List<Integer> list = getList(10, () -> new Random().nextInt(100));
    }

Function接口

Function 接口是函数型接口,有返回值,Java8 中对 Function 接口的定义如下所示。

@FunctionalInterface
public   interface    Function<T,    R>    {
	R    apply(T    t);
	default   <V>    Function<V,   R>    compose(Function<?    super   V,   ?    extends    T>    before)    { 
		Objects.requireNonNull(before);
		return   (V   v)    ->   apply(before.apply(v)); 
	}
	default   <V>    Function<T,   V>    andThen(Function<?    super   R,    ?    extends   V>    after)    { 
		Objects.requireNonNull(after);
		return   (T    t)    ->    after.apply(apply(t)); 
	}
	static    <T>    Function<T,   T>    identity()    {
		return   t    ->    t; 
	}
}

使用示例

public static String dealString(String str, Function<String,String> function){
    return function.apply(str);
}

@Test
public  void testFunction(){
    String str = dealString("hello",s -> s.toUpperCase());
    System.out.println(str);
}

Predicate接口

Predicate 接口是断言型接口,返回值类型为 boolean,Java8 中对 Predicate 接口的定义如下
所示。

@FunctionalInterface
public   interface    Predicate<T>    {
	boolean    test(T    t);
	default   Predicate<T>    and(Predicate<?    super   T>    other)    { 
		Objects.requireNonNull(other);
		return   (t)    ->    test(t)   &&    other.test(t); 
	}
	default   Predicate<T>    negate()    { 
		return   (t)    ->    !test(t);
	}
	default   Predicate<T>    or(Predicate<?    super   T>    other)    { 
		Objects.requireNonNull(other);
		return   (t)    ->    test(t)   ||    other.test(t); 
	}
	static    <T>    Predicate<T>    isEqual(Object    targetRef)    { 
		return   (null   ==    targetRef)
		?    Objects::isNull
		:   object    ->    targetRef.equals(object);
	} 
}

使用说明:

public static List<String> dealPredicate(List<String> list, Predicate<String> predicate){
    List<String> stringList = new ArrayList<>();
    for (String str:list){
        if(predicate.test(str)){
            stringList.add(str);
        }
    }
    return stringList;
}

@Test
public void testPredicate(){
    System.out.println(dealPredicate(Arrays.asList("hello","world","aaa","bbb"),s->s.length()>=5));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆天至尊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值