java8在java.util.function
包中给我们预留了几个泛型函数式接口。Predicate
、Consumer
、Function
。
Predicate
接口里面有一个test
方法,接口一个泛型T对象并返回一个boolean值。
static <T> List<T> filter(List<T> list, Predicate<T> predicate) {
List<T> result = new ArrayList<>();
for (T t : list) {
if (predicate.test(t)) {
result.add(t);
}
}
return result;
}
传递一个String类型的列表,过滤掉其中为空的元素。
List<String> list = new ArrayList<>();
list.add("");
list.add("one");
List<String> result = filter(list,s->s.length()>0);
for(String s:result){
System.out.println(s);
}
Consumer
接口里面定义了一个accept
方法,接受一个泛型T对象,没有返回值。
static <T> void consumer(List<T> list, Consumer<T> consumer) {
for (T t : list) {
consumer.accept(t);
}
}
输出列表元素。
consumer(list, System.out::println);
Function
接口里面定义了一个apply
方法,接受一个泛型T,并返回泛型R。
static <T,R> List<R> func(List<T> list, Function<T,R> fun){
List<R> result = new ArrayList<>();
for(T t:list){
result.add(fun.apply(t));
}
return result;
}
获取列表每个元素的长度。
List<Integer> lengthList=func(list, String::length);
for(Integer integer:lengthList){
System.out.println(integer);
}
评论 (0)