functional interface

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

案例

要在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());
                }
            }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值