Java Lambda 表达式的使用实例 (四大函数式接口与其他函数接口的示例)

Java 8 给我们提供了一些原生的函数式接口去使用;我们可以通过继承这些接口去定义自己的函数式接口,或者根据需求直接使用这些接口。原生的函数式接口可分为四大类。

  1. Consumer接口: 消费型接口,内置函数 void accept(T t),可传入对象参数,不返回。
  2. Supplier接口:供给型接口,内置函数 T get(), 不接受参数但返回。
  3. Function<T,R>接口:函数型接口,内置函数 R apply(T t), 接受对象参数并返回。
  4. Predicate接口: 断定型接口,内置函数 boolean test(T t), 接受对象参数并返回布尔值。

示例代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

import org.junit.jupiter.api.Test;

import static java.lang.System.out;
public class LambdaTest2 {
	
	@Test
	public void test1() {
		Consumer<Integer> consumer =  number -> out.println("Consumer1: " + number);
		consumer.andThen(number -> out.println("Consumer2:" + number)).accept(10);
	}
	 
	@Test
	public void test2() {
		Supplier<Person> supplier = () -> new Person();
		out.println(supplier.get());
	}
	
	@Test
	public void test3() {
		Function<String, Person> function = name -> new Person(name, 1, 20);
		out.println(function.apply("Steven"));
	}
	
	@Test
	public void test4() {
		List<Integer> list = Arrays.asList(1,2,3,4,5,6);
		out.println(filterNumber(list, number -> number > 3));
	}
	
	private List<Integer> filterNumber(List<Integer> list, Predicate<Integer> predicate) {
		List<Integer> listTemp = new ArrayList<Integer>();
		for(Integer number : list) {
			if(predicate.test(number)) {
				listTemp.add(number);
			}
		}
		return listTemp;
	}
}

输出:

Consumer1: 10
Consumer2:10
Person [name=Nobody, gender=0, age=0]
Person [name=Steven, gender=1, age=20]
[4, 5, 6]
  • 其他JDK提供的函数式接口
    在这里插入图片描述
    这些接口的使用与四大接口大同小异, 使用时注意传入对象参数的个数和返回值即可。
发布了70 篇原创文章 · 获赞 4 · 访问量 3039

猜你喜欢

转载自blog.csdn.net/qq_34515959/article/details/105002780