这几个接口都是在java.util.function包下
Consumer
这是一个消费型的接口,通过传入参数,然后输出值.
/**
* Consumer实例
* 该接口有一个accept方法需要传递一个参数,还有一个默认方法
*/
@Test
public void test03(){
Consumer<String> stringConsumer = new Consumer<String>(){
/**
* Performs this operation on the given argument.
*
* @param s the input argument
*/
@Override
public void accept(String s) {
// 这里可以对传递进来的参数 进行操作
// s="我是改写的参数";
System.out.println(s);
}
};
stringConsumer.accept("我是传递的参数");
System.out.println("==============================");
// Stream流的forEach使用的就是 Consumer类型的参数 Consumer<? super T> action
Stream<String> stream = Stream.of("aaa", "bbb", "ddd", "ccc", "fff");
// 这就意味着我们可以使用 Consumer接口来对于stream流的数据进行过滤或者操作
// stream.forEach(stringConsumer);
// 例子 有个要点,就是stream流只能被消费一次,即每次创建的steam流只能被用一次,所以上面的那个需要注释掉或者再次创建一个steam流
System.out.println("==============================");
stream.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
// 对传递的字符串进行操作
if(s.equals("aaa")){
s="我是aaa";
}
System.out.println(s);
}
});
System.out.println("==============================");
Stream<String> stream02= Stream.of("aaa", "bbb", "ddd", "ccc", "fff");
// stream02.forEach(System.out::print);
// 使用lambda表达式输出,这就是我们常用的那种,本质就是传递一个实现Consumer接口,重写其中的accept方法
// Consumer<String> consumer1 = (s) -> { System.out.println(s); };
stream02.forEach(s -> {
System.out.println(s);
});
}
小结
● Consumer是一个接口,其主要方法就是重写accept方法,就可以输出信息或者对信息进行操作
● lambda表达式就是隐式的实现接口来去作为Stream.forEach的参数 实现遍历.
Supplier
这个接口是一个供给型的接口,可以用来存储数据,
/**
* Supplier接口实例,相当于一个容器存储值
*/
@Test
public void test04() throws Throwable {
// Supplier接口只有一个get方法 没有参数,
Supplier<Double> supplier = Math::random;
Object o = supplier.get();
System.out.println(o);
// 为什么要说他是一个容器呢?
Supplier<String> str = new Supplier<String>() {
@Override
public String get() {
return "我是一个容器";
}
};
String s = str.get();
System.out

最低0.47元/天 解锁文章
2332

被折叠的 条评论
为什么被折叠?



