简介:
Java 8增加的一个新技术点"函数式接口"放在java.util.function包下,与Lambda表达式密切相关
Consumer-消费者
提供输入参数,不返回执行结果
Consumer<T>
- 提供一个T类型的输入参数,不返回执行结果
BiConsumer<T,U>
- 提供两个自定义类型的输入参数,不返回执行结果
*Consumer
- 表示接受单个*值参数,但不返回结果的操作
StringBuilder str = new StringBuilder("Hello");
Consumer<StringBuilder> consumer1 = s -> s.append(" Java 8");
consumer1.accept(str);
Predicate-谓词
指定的输入参数,返回一个boolean类型的结果(布尔值函数)
Predicate<T>
- 对给定的输入参数执行操作,返回一个boolean类型的结果
BiPredicate<T,U>
- 对给定的两个输入参数执行操作,返回一个boolean类型的结果
*Predicate
- 对给定的*参数执行操作,返回一个boolean类型的结果
Predicate<Integer> predicate = numb -> numb != 0;
predicate.test(6);
Function-函数
接收参数并返回结果的函数
Function<T,R>
- 接收一个参数并返回结果的函数
BiFunction<T,U,R>
- 接受两个参数并返回结果的函数
*Function<R>
- 接收一个*类型的参数并返回结果的函数
Function<String, String> function = st -> st + " bryant!";
function.apply("kobe");
Supplier-供应商
无需输入参数,返回一个类型的执行结果
Supplier<T>
- 不提供输入参数,但是返回结果的函数
*Supplier
- 不提供输入参数,但是返回*结果的函数
Supplier<String> supplier = () -> "Hello Jordan!";
supplier.get();
Operator-操作员
对输入参数执行操作,返回与输入参数类型相同的结果
UnaryOperator<T>
- 提供单个参数,并且返回一个与输入参数类型一样的结果
BinaryOperator<T>
- 提供两个参数,并且返回结果与输入参数类型一致的结果
*BinaryOperator
- 提供两个*参数并且返回*类型结果
UnaryOperator<String> unaryOperator = st -> st + " wode";
unaryOperator.apply("Hello");
实际样例
package com.zhao.sian;
import java.util.function.Function;
public class funtionTest {
public static void main(String[] args) {
Integer i = 15;
functionListTest(i, val-> val * 10);
}
public static void functionListTest(Integer i, Function<Integer, Integer> func) {
int newValue = func.apply(i);
System.out.println(newValue);
}
}
输出结果 150
函数是接口,是实际运用中往往配合Lambda表达式一起使用。
如:lists.stream() .filter(i -> lists1.contains(func.apply(i))) .collect(Collectors.toList());