JDK8四大内置核心函数式接口

JDK8 中的四大核心函数式接口

  • @FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口
    1. Consumer:消费型接口

    void accpt(T t);

1
2
3
4
5
6
7
8
9
10
public class ConsumerTest {
@Test
public void test() {
happy(1000d, (money) -> System.out.println("今天消费了" + money + "元"));
}

public static void happy(Double money, Consumer<Double> customer) {
customer.accept(money);
}
}
2. Supplier:供给型接口

T get();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class SupplierTest {
@Test
public void test() {
//生成10个100以内的随机数
List<Integer> list = getNumList(10, () -> (int) (Math.random() * 100));
list.forEach(System.out::println);
}

/**
* 产生指定个数的随机数放入集合中并返回
*
* @param num 生成随机数的个数
* @param supplier 供给型接口
* @return List
*/
public static List<Integer> getNumList(int num, Supplier<Integer> supplier) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < num; i++) {
list.add(supplier.get());
}
return list;
}
}
3. Function:函数式接口

R apply(T t);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class FunctionTest {
@Test
public void test1() {
System.out.println(strHandler("hello world !", (str)->str.toUpperCase()));
}

@Test
public void test2() {
// 类::实例方法名
System.out.println(strHandler("hello world !",String::toUpperCase));
}

public static String strHandler(String str, Function<String, String> function) {
return function.apply(str);
}
}
4. Predicate:消费型接口

boolean test(T t);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class PredicateTest {
@Test
public void test() {
List<String> list = Arrays.asList("hello java", "C#", "C++", "jar", "java");
// 判断集合中是否包含 java 包含就添加进新的集合并返回
List<String> stringList = filterStr(list, (str) -> str.contains("java"));
stringList.forEach(System.out::println);
}

/**
* 将满足条件的字符串放进新的集合中并返回
*
* @param list List
* @param predicate 断言型接口
* @return List
*/
public static List<String> filterStr(List<String> list, Predicate<String> predicate) {
List<String> strList = new ArrayList<>();
for (String str : list) {
if (predicate.test(str)) {
strList.add(str);
}
}
return strList;
}
}