函数式编程
许多业务场景之下 我们需要在自己开发的模块编写辅助函数 ,但是在其他业务场景中没有使用。为了安全我们可以使用 private 防止外部使用。但是往往同一文件中许多同事共同开发,自己编写的辅助函数不想被其他同事使用,此时我们可以使用,函数式编程。
实现步骤
1、定义一个借口
2、利用Lambd 在自己开发的模块中 实现辅助函数。
例如
// 定义函数式接口
@FunctionalInterface
public interface XFunction<XFirstArgs,XResult> {
XResult runAsSys(XFirstArgs xFirstArgs);
}
// 实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserEntity {
private Long uid;
private String uname;
private String sex;
private Integer age;
}
// 业务接口
public interface TestService {
String getUserName(Long uid);
}
// 业务实现类
public class TestServiceImpl implements TestService {
public static List<UserEntity> userEntityList=new ArrayList<>();
static {
for (int i = 0; i < 20; i++) {
userEntityList.add(UserEntity.builder().sex("男").uname("学生"+i).age(i).uid(Long.valueOf(i)).build());
}
}
@Override
public String getUserName(Long uid) {
// 辅助函数 如果放在业务函数之外 有可能被同事调用
XFunction<Long,String> xF=(
longUid->{
UserEntity userEntity = userEntityList.stream().filter(it -> it.getUid().equals(longUid)).findFirst().orElse(null);
return userEntity==null? null:userEntity.getUname();
}
);
return xF.runAsSys(uid);
}
}
测试结果
public static void main(String[] args) {
TestService te=new TestServiceImpl();
System.out.println(te.getUserName(2000L));
}
返回结果 : null
TestService te=new TestServiceImpl();
System.out.println(te.getUserName(5L));
返回结果 :学生5
既满足 不被同事调用 又能完成业务逻辑