Java8函数笔记

Posted 我的小侯子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java8函数笔记相关的知识,希望对你有一定的参考价值。

Predicate

函数式接口:Predicate<T>
函数描述符:T -> boolean
原始类型特化:IntPredicate, LongPredicate, DoublePredicate

Predicate接口需要实现test()方法,返回boolean类型;
boolean test(T t);
另外有三个default方法

//&&,两个都是true才返回true
default Predicate<T> and(Predicate<? super T> other) 
        Objects.requireNonNull(other);
        return (t) -> test(t) && other.test(t);
    
//||,有一个true就返回true
default Predicate<T> or(Predicate<? super T> other) 
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    
// !,取反
default Predicate<T> negate() 
        return (t) -> !test(t);
    
Predicate<String> predicate = s -> "1".equals(s) || "2".equals(s);
Predicate<String> other= s -> "3".equals(s) || "4".equals(s);
//
Predicate<String> and = predicate.and(other);
Predicate<String> or = predicate.or(other);
Predicate<String> negate = predicate.negate();
System.out.println("test:" + predicate.test("3")+ "==and==" + and.test("3") + "==or==" + or.test("3") + "==negate==" + negate.test("1"));

打印的Log

test:false==and==false==or==true==negate==false

Consumer

函数式接口:Consumer<T>
函数描述符:T -> Void
原始类型特化:IntConsumer, LongConsumer, DoubleConsumer

Consumer接口需要实现accept()方法,没有返回值。
void accept(T t);
一个default方法

//先执行当前Consumer对象的accept()方法,紧接着调after的accept()方法。
default Consumer<T> andThen(Consumer<? super T> after) 
        Objects.requireNonNull(after);
        return (T t) ->  accept(t); after.accept(t); ;
    
Consumer<String> consumer = System.out::println;
        Consumer<String> after = s -> System.out.println(s + "你好");

        consumer.accept("Hello World!");

        Consumer<String> andThen = consumer.andThen(after);
        andThen.accept("美女");

打印Log

Hello World!
美女
美女你好

Function

函数式接口:Function<T,R>
函数描述符:T -> R
原始类型特化:

IntFunction<R>,
IntToDoubleFunction,
IntToLongFunction,
LongFunction<R>,
LongToDoubleFunction,
LongToIntFunction,
DoubleFunction<R>,
ToIntFunction<T>,
ToDoubleFunction<T>,
ToLongFunction<T>

Function接口实现apply()方法,
R apply(T t);
一个default方法

//before调apply方法的返回值传入当前对象的apply方法中返回,当然before返回值必须是当前对象的参数类型
 default <V> Function<V, R> compose(Function<? super V, ? extends T> before) 
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    
Function<String, String> function = s -> s + ",你好";
        Function<String, String> before = s -> s + s;
        String apply = function.apply("小子");
        System.out.println(apply);

        Function<String, String> compose = function.compose(before);
        System.out.println(compose.apply("包子"));

打印Log

小子,你好
包子包子,你好

Supplier

函数式接口:Supplier<T>
函数描述符:() -> T
原始类型特化:BooleanSupplier,IntSupplier, LongSupplier, DoubleSupplier

Supplier只有一个实现方法
T get();

Supplier<String> supplier = () -> "100";
        String s = supplier.get();
        System.out.println(s);

        Supplier<Person> personSupplier = () -> 
            Person person = new Person();
            person.name = "小明";
            return person;
        ;
        Person person = personSupplier.get();
        System.out.println(person.name);

打印Log

100
小明

还有。。。

以上是关于Java8函数笔记的主要内容,如果未能解决你的问题,请参考以下文章

Java8-02-笔记

Java8学习笔记 - 在哪里可以使用Lambda表达式 + 什么是函数式接口

Java8学习笔记 - 在哪里可以使用Lambda表达式 + 什么是函数式接口

《Java8实战》读书笔记12:函数式编程

《Java8实战》读书笔记12:函数式编程

Java8函数笔记