java8 Consumer supplier predicate function 简单使用示例

java8 Consumer基本使用

Java8之后提供了consumer接口,Consumer字面意思是消费者,这个接口里面只有一个accept方法,主要的功能是消费输入的数据,无返回。主要的几种使用方式有以下几种:

		@Test
    public void testConsumer() {
        //1. 直接new一个consumer对象 ,实现里面的accept方法
        Consumer consumer = new Consumer() {
            @Override
            public void accept(Object o) {
                System.out.println("consumer,消费者,只消费不生产");
            }
        };

        List<String> aList = Arrays.asList("13.a", "3", "5");
        aList.stream().forEach(consumer);

				//2. lambda表达式可以返回一个consumer对象
        consumer = (s) -> System.out.println(s);
        aList.stream().forEach(consumer);
				//3. 方法引用可以返回一个consumer对象
        aList.stream().forEach(System.out::println);

				//4 IntConsumer DoubleConsumer LongConsumer 等是和Consumer平级的其他几种接口,里面有accept和andThen两个方法,andThen可以连续多用多次accept内部的逻辑。
        IntConsumer intConsumer0 = s -> System.out.println(s + "intconsumer0");
        IntConsumer intConsumer1 = s -> System.out.println(s + "intconsumer1");
        intConsumer0.andThen(intConsumer1).accept(0);
    }

Java8 Supplier 使用

Supplier 接口是一个供给型的接口,Supplier接口内只有一个get方法,与consumer相反,supplier不接收任何参数,只返回数据。

		@Test
    public void testSupplier() {
        //① 使用Supplier接口实现方法,只有一个get方法,无参数,返回一个值
        Supplier<Integer> supplier = new Supplier<Integer>() {
            @Override
            public Integer get() {
                //返回一个随机值
                return new Random().nextInt();
            }
        };

        System.out.println(supplier.get());

        //② 使用lambda表达式,
        supplier = ()-> new Random().nextInt();
        System.out.println(supplier.get());

        //③ 使用方法引用
        Supplier<Double> supplier2 = Math::random;
        System.out.println(supplier2.get());

        //4. IntSupplier DoubleSupplier LongSupplier 里面只有一个getAsXXX的方法,
        IntSupplier intSupplier = new IntSupplier() {
            @Override
            public int getAsInt() {
                return new Random().nextInt();
            }
        };

        System.out.println(intSupplier.getAsInt());
    }

Java8 Predicate接口

Predicate接口里面只有一个 test方法,其主要是职能是判断对错,传入一个参数返回一个boolean类型。

@Test
public void testPredicate() {
    Predicate<Integer> predicate = new Predicate() {
        @Override
        public boolean test(Object o) {
            return false;
        }
    };

    predicate = (s) -> s > 5;
    System.out.println(predicate.test(3));


    List<Integer> aList = Arrays.asList(13, 3, 5);
    aList = aList.stream().filter(predicate).collect(Collectors.toList());
    System.out.println(aList);
}

Java8 Function接口

Function 接口是一个功能型接口,里面只有一个apply方法,主要起转换作用,将输入数据转换成另一种形式的输出数据。

@Test
public void testFunction() {
    Function<String, Integer> function = new Function<String, Integer>() {
        @Override
        public Integer apply(String integer) {
            return integer.length();
        }
    };
    List<String> aList = Arrays.asList("13.a", "3", "5");
    List newList = aList.stream().map(function).collect(Collectors.toList());
    System.out.println(newList);
}
上一篇:[paper reading][IJCAI 2020] Turning 30: New Ideas in Inductive Logic Programming


下一篇:函数式