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