Java8 常用方法笔记
Stream使用
提取类的List的某个字段转化为字符串List
List<String> nameList = demoList.stream().map(Demo::getName).collect(Collectors.toList());
List转化为map
// (key1, key2) -> key2 表示如果Map的key重复了,那么value置为新值
Map<String, Demo> demoMap = demoList.stream().collect(
Collectors.toMap(Demo::getName, (p) -> p, (key1, key2) -> key2));
List根据规则分组
// 根据name的简单分组
Map<String, List<Demo>> demoListMap = demoList.stream().collect(
Collectors.groupingBy(Demo::getName, HashMap::new, Collectors.toList()));
// 同理可根据修改分组key的获取,进行更复杂的分组
Map<String, List<Demo>> demoNameIdMap = demoList.stream().collect(
Collectors.groupingBy(demo -> {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(demo.getDemoId());
if (demo.isActive()) {
stringBuilder.append(demo.getName());
}
return stringBuilder.toString();
}, HashMap::new, Collectors.toList()));
List过滤成员
// 同理可以将Demo::isActive 换成更加复杂的判断
List<Demo> activeDemoList = demoList.stream().filter(Demo::isActive).collect(Collectors.toList());
CompletableFuture异步处理
无返回值的异步处理
public Map<String, Object> test(String taskId, String employeeCode, Long docId) {
Map<String, Object> workflowInfo = new HashMap<>(4);
CompletableFuture<Void> taskDetailInfo = CompletableFuture
.runAsync(() -> weChatWorkflowService.getTaskDetail(workflowInfo, taskId, employeeCode));
CompletableFuture<Void> borrowInfo = CompletableFuture
.runAsync(() -> this.getBorrowInfo(workflowInfo, docId));
try {
borrowInfo.get();
taskDetailInfo.get();
} catch (Exception e) {
e.printStackTrace();
}
// return会阻塞到taskDetailInfo 和 borrowInfo都处理完才会返回结果
return workflowInfo;
}