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); }
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()); }
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); }
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); }