前言:
lambda是一个匿名函数
()里的表示参数
{}里的表示方法体
-> 表示lambda运算符
常用的表达式如下:
一、groupingBy用法
目的:数据库(想把相同的合并到一起)
代码示例:
//1.分页查询,通过重点任务主题、重点事项、重点负责人或任务的开始时间、结束时间
List<ImportantTaskListDTO> importantTaskListDTOList = importantTaskMapper.getList(userId, taskDO, importantTaskSearchDTO);
//2.找每个重点任务对应的单个或多个负责人
//生成一个map,键是按照groupingBy的分组编号,值是对应的分组list集合
Map<Long, List<ImportantTaskListDTO>> directorListMap = importantTaskListDTOList.stream().collect(Collectors.groupingBy(ImportantTaskListDTO::getTaskId));
二、foreach用法
//生成一个map,键是按照groupingBy的分组编号,值是对应的分组list集合
Map<Long, List<ImportantTaskListDTO>> directorListMap = importantTaskListDTOList.stream().collect(Collectors.groupingBy(ImportantTaskListDTO::getTaskId));
logger.info("directorListMap="+directorListMap);
importantTaskListDTOList.forEach(v1 -> {
Long taskId = v1.getTaskId();
List<ImportantTaskListDTO> directorList = directorListMap.get(taskId);
StringBuilder directorNamesBuilder = new StringBuilder();
directorList.forEach(v2 -> {
Long directorUserId = v2.getDirectorUserId();
String directorUserName = v2.getDirectorUserName();
directorNamesBuilder.append(directorUserName).append(",");
});
String directorNames = StringBuilderUtil.removeCharacterOfEndOfMessage(directorNamesBuilder);
//负责人名称们(逗号隔开)
v1.setDirectorNames(directorNames);
});
三、相同list去重(list里面大部分一致,小部分不一致的,但是这小部分不返给前端)
// 原list去重,去掉完全一样的list行,通过taskId随机去重,利用的是treeSet的特性
importantTaskListDTOList = importantTaskListDTOList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(ImportantTaskListDTO::getTaskId))), ArrayList::new));
参考:https://blog.csdn.net/Oaklkm/article/details/127074712?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-3-127074712-blog-117334264.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-3-127074712-blog-117334264.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=6
四、stream().map().collect(Collectors.toList())用法,把list对象里面的一个列生成对应的一个新list集合
List<AbnormalBuild> abnormalBuildList = this.list(new QueryWrapper<AbnormalBuild>().lambda().eq(AbnormalBuild::getStatus, Status.NORMAL.getCode()).eq(AbnormalBuild::getProjectId, SecurityUtils.getProjectId()));
List<String> resourceList = abnormalBuildList.stream().map(AbnormalBuild::getResourceId).collect(Collectors.toList());
LIST交集,差集,并集,
public class CollectionsTest {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
&