JDK8中的函数式接口功能分析与demo
Posted 爱叨叨的程序狗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK8中的函数式接口功能分析与demo相关的知识,希望对你有一定的参考价值。
Consumer
消费型接口,通过传入参数输出值,可以理解为定义了一个void方法处理数据,如果出现异常,则把异常转发给调用者。
例如forEach
Supplier
Optional.orElseGet()方法入参就是Supplier,如果存在值,通过Supplier容器存储该值并通过其get方法返回。
Predicate
谓词表达的是一种关系,其作用是判断。
Predicate<Integer> predicate = new Predicate<Integer>() {
@Override
public boolean test(Integer integer) {
if (integer > 5) {
return true;
}
return false;
}
};
Stream<Integer> stream = Stream.of(1, 23, 3, 4, 5, 56, 6, 6);
//以上代码相当于
List<Integer> lists = stream.filter(i -> i > 5).collect(Collectors.toList());
i->i>5;就相当于一个Predicate对象, i-> i>5 中的 ->是一个语法糖,是lambda的写法,
(parameters) -> expression
或
(parameters) ->{ statements; }
Function
功能型接口,作用是类型转换,将输入数据转换成另一种形式输出。
public void test_Function() {
Function<String, Integer> function = new Function<String, Integer>() {
@Override
public Integer apply(String s) {
//重写Function的apply方法,获取字符串的长度,将String类型转化为Integer类型
//Function中第一个泛型是当前类型,第二个Integer是转换为后的类型
return s.length();
}
};
Stream<String> stream = Stream.of("aaa", "bbbbb", "ccccccv");
Stream<Integer> stream1 = stream.map(function);
stream1.forEach(System.out::println);
System.out.println("********************");
ArrayList<String> stringArrayList = new ArrayList<>();
stringArrayList.add("aaaaaaaa");
stringArrayList.add("bbbbb");
stringArrayList.add("ccc");
stringArrayList.add("dd");
//使用lambda的写法
//Stream.map()将当前类型转化为其他类型
List<Integer> collect = stringArrayList.stream().map(String::length).collect(Collectors.toList());
System.out.println(collect);
}
使用map方法,Function为入参,将String类型转化为Integer。
该API常用于获取List中单一属性值的场景。
以上是关于JDK8中的函数式接口功能分析与demo的主要内容,如果未能解决你的问题,请参考以下文章