函数式编程
一种编程范式,它将电脑运算视为函数运算,并且避免使用程序状态以及易变对象。其中,λ演算(lambda calculus)为该语言最重要的基础。
特性
函数是“第一等公民”
函数与其他数据类型一样,可以赋值给其他变量,也可以作为参数,也可以作为返回值。
不可变性
像闭包一样,传入的自由变量是不可变的,降低数据的不一致性。同时也只返回新的值,不修改变量状态,没有“副作用”。
为什么使用
- 代码简洁,开发快速
- 易于理解,降低风险
- 易于并行
- 延迟执行
例: 根据用户名批量并行获取工号
Before
public List<String> listEmployIds(List<String> usernames) throws Exception {
CountDownLatch countDownLatch = new CountDownLatch(usernames.size());
ConcurrentHashMap<String, UserDTO> mapping = new ConcurrentHashMap<>();
for (String username : usernames) {
ThreadPoolUtil.execute(() -> {
UserDTO user = userService.getUserDetail(username);
mapping.put(username, user);
countDownLatch.countDown();
});
}
countDownLatch.await();
List<String> employIds = new ArrayList<>(usernames.size());
for (UserDTO user : mapping.values()) {
employIds.add(user.getEmployeeId());
}
return employIds;
}
After
public List<String> listEmployIds(List<String> usernames) throws Exception {
return usernames.parallelStream().map(userService: