functional interface

文章介绍了如何在TodoTaskRepository类中使用Java8的BiPredicate接口来创建一个自定义查找方法。该方法接受两个参数并返回一个布尔值,通过传入的条件过滤任务列表。同时,文章展示了针对不同参数类型(如ID和状态)的单元测试用例,确保方法功能的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
更优雅

案例

要在TodoTaskRepository写find方法找到对应task列表,传入自定义的如何find

要传入两个参数,返回一个bool,在文档里找这样的functional interface
java8官方文档-Package java.util.function
BiPredicate是这样的
在这里插入图片描述
接口函数是test

public class TodoTaskRepository {
    private final List<TodoTask> tasks;
		 
		 public <T> List<TodoTask> find(T field, BiPredicate<T,TodoTask> filter) {
		        var tasksFound = new ArrayList<TodoTask>();
		        for (final TodoTask task : tasks) {
		            if(filter.test(field, task)) {
		                tasksFound.add(task);
		            }
		        }
		        return tasksFound;
		    }
}

单元测试

在find传入的参数中直接实现了接口函数test:(field, task) -> field.equals(task.getID())
|| (field,task)->field.equals(task.getStatus())

			@ParameterizedTest
            @ValueSource(ints = {1, 2, 3, 4, 5})
            public void should_return_task_by_given_id(int givenId) {
                // Given
                final var todoTaskRepository = new TodoTaskRepository(this.allTasks);
                // When
                final var taskListFound = todoTaskRepository
                							.find(givenId, ((field, task) -> field.equals(task.getID())));
                // Then
                assertTrue(taskListFound.size() > 0);
                for (final TodoTask taskFound : taskListFound) {
                    assertEquals(givenId, taskFound.getID());
                }
            }
			@ParameterizedTest
            @EnumSource(TodoTaskStatus.class)
            public void should_return_task_by_given_status(TodoTaskStatus givenStatus) {
                // Given
                final var todoTaskRepository = new TodoTaskRepository(this.allTasks);
                // When
                final var taskListFound = todoTaskRepository
                					     	.find(givenStatus, (field,task)->field.equals(task.getStatus()));
                // Then
                assertNotNull(taskListFound);
                assertTrue(taskListFound.size() > 0);
                for (final TodoTask taskFound : taskListFound) {
                    assertEquals(givenStatus, taskFound.getStatus());
                }
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值