【Java8新特性】还没搞懂函数式接口?赶快过来看看吧!

| Supplier供给型接口 | 无 | T | 返回类型为T的对象,接口定义的方法:T get() |

| Function<T, R>函数式接口 | T | R | 对类型为T的对象应用操作,并R类型的返回结果。接口定义的方法:R apply(T t) |

| Predicate断言型接口 | T | boolean | 确定类型为T的对象是否满足约束条件,并返回boolean类型的数据。接口定义的方法:boolean test(T t) |

其他函数接口

除了四大核心函数接口外,Java8还提供了一些其他的函数式接口。

| 函数式接口 | 参数类型 | 返回类型 | 使用场景 |

| — | — | — | — |

| BiFunction(T, U, R) | T, U | R | 对类型为T,U的参数应用操作,返回R类型的结果。接口定义的方法:R apply(T t, U u) |

| UnaryOperator(Function子接口) | T | T | 对类型为T的对象进行一 元运算, 并返回T类型的 结果。 包含方法为 T apply(T t) |

| BinaryOperator (BiFunction 子接口) | T, T | T | 对类型为T的对象进行二 元运算, 并返回T类型的 结果。 包含方法为 T apply(T t1, T t2) |

| BiConsumer<T, U> | T, U | void | 对类型为T, U 参数应用 操作。 包含方法为 void accept(T t, U u) |

| ToIntFunction | T | int | 计算int值的函数 |

| ToLongFunction | T | long | 计算long值的函数 |

| ToDoubleFunction | T | double | 计算double值的函数 |

| IntFunction | int | R | 参数为int 类型的函数 |

| LongFunction | long | R | 参数为 long类型的函数 |

| DoubleFunction | double | R | 参数为double类型的函数 |

四大核心函数式接口


Consumer接口


1.接口说明

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

@FunctionalInterface

public interface Consumer {

void accept(T t);

default Consumer andThen(Consumer<? super T> after) {

Objects.requireNonNull(after);

return (T t) -> { accept(t); after.accept(t); };

}

}

2.使用示例

public void handlerConsumer(Integer number, Consumer consumer){

consumer.accept(number);

}

@Test

public void test1(){

this.handlerConsumer(10000, (i) -> System.out.println(i));

}

Supplier接口


1.接口说明

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

@FunctionalInterface

public interface Supplier {

T get();

}

2.使用示例

public List getNumberList(int num, Supplier supplier){

List list = new ArrayList<>();

for(int i = 0; i < num; i++){

list.add(supplier.get())

}

return list;

}

@Test

public void test2(){

List numberList = this.getNumberList(10, () -> new Random().nextInt(100));

numberList.stream().forEach(System.out::println);

}

Function接口


1.接口说明

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

@FunctionalInterface

public interface Function<T, R> {

R apply(T t);

default Function<V, R> compose(Function<? super V, ? extends T> before) {

Objects.requireNonNull(before);

return (V v) -> apply(before.apply(v));

}

default Function<T, V> andThen(Function<? super R, ? extends V> after) {

Objects.requireNonNull(after);

return (T t) -> after.apply(apply(t));

}

static Function<T, T> identity() {

return t -> t;

}

}

2.使用示例

public String handlerString(String str, Function<String, String> func){

return func.apply(str);

}

@Test

public void test3(){

String str = this.handlerString(“binghe”, (s) -> s.toUpperCase());

System.out.println(str);

}

Predicate接口


1.接口说明

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

@FunctionalInterface

public interface Predicate {

boolean test(T t);

default Predicate and(Predicate<? super T> other) {

Objects.requireNonNull(other);

return (t) -> test(t) && other.test(t);

总结

我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。

这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:

希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!
有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

大家可以把Java基础,JVM,并发编程,MySQL,Redis,Spring,Spring cloud等等做一个知识总结以及延伸,再去进行操作,不然光记是学不会的,这里我也提供一些脑图分享给大家:

[外链图片转存中…(img-Fnh8piSL-1718869855560)]

[外链图片转存中…(img-XLZlCcao-1718869855561)]

[外链图片转存中…(img-yLb4uy2r-1718869855561)]

希望你看完这篇文章后,不要犹豫,抓紧学习,复习知识,准备在明年的金三银四拿到心仪的offer,加油,打工人!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值