首页 > 编程语言 >Java的Lambda表达式总结-JDK1.8

Java的Lambda表达式总结-JDK1.8

时间:2023-02-22 10:45:46浏览次数:41  
标签:JDK1.8 Java stream list List list1 collect new Lambda

前言:   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<>();         list1.add("1");         list1.add("2");         list1.add("3");         list1.add("4");         list1.add("5");         List<String> list2 = new ArrayList<>();         list2.add("2");         list2.add("3");         list2.add("6");         list2.add("7");         // 交集         List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(toList());         System.out.println("---交集 intersection---");         intersection.parallelStream().forEach(System.out::println);         // 差集 (list1 - list2)         List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(toList());         System.out.println("---差集 reduce1 (list1 - list2)---");         reduce1.parallelStream().forEach(System.out::println);         // 差集 (list2 - list1)         List<String> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(toList());         System.out.println("---差集 reduce2 (list2 - list1)---");         reduce2.parallelStream().forEach(System.out::println);         // 并集         List<String> listAll = list1.parallelStream().collect(toList());         List<String> listAll2 = list2.parallelStream().collect(toList());         listAll.addAll(listAll2);         System.out.println("---并集 listAll---");         listAll.parallelStream().forEachOrdered(System.out::println);         // 去重并集         List<String> listAllDistinct = listAll.stream().distinct().collect(toList());         System.out.println("---得到去重并集 listAllDistinct---");         listAllDistinct.parallelStream().forEachOrdered(System.out::println);     } }     五、stream().map(v->{})这种方法可以,把list对象里面的多列生成对应的一个新list集合,常用来返回DTO里面包含了List<DTO>的封装 public CompanyDeptTreeDTO selectNewDeptList(String companyId){ //根据公司id查询公司 BCompany bCompany= remoteTreeService.infoById(companyId,SecurityConstants.INNER).getData(); CompanyDeptTreeDTO companyDeptTreeDTO = new CompanyDeptTreeDTO(); companyDeptTreeDTO.setResourceId(bCompany.getResourceId()); companyDeptTreeDTO.setLevel(bCompany.getLevel()); companyDeptTreeDTO.setName(bCompany.getName()); companyDeptTreeDTO.setShortName(bCompany.getShortName()); companyDeptTreeDTO.setNumber(""); //查询公司下部门集合 List<DepartmentsDTO> departmentsDTOSList = new ArrayList<>(); departmentsDTOSList = remoteTreeService.getNewChildren(companyId,SecurityConstants.INNER).getData() .stream().distinct().map(v->{ DepartmentsDTO departmentsDTO = new DepartmentsDTO();// departmentsDTO.setResourceId(v.getResourceId()); departmentsDTO.setName(v.getName()); departmentsDTO.setCode(""); departmentsDTO.setShortName(""); return departmentsDTO; }).collect(Collectors.toList()); //组装并返回 companyDeptTreeDTO.setDepartmentsDTO(departmentsDTOSList); return companyDeptTreeDTO; }     六、stream().map用法,同上,另外一个写法 //更新活动文件表,编辑一批图片,新图片就新增到数据库,存在则不管,删除的图片就新增更新人更新时间并改变status为0,其它都update List<ActivityFile> activityFileList = this.list(new QueryWrapper<ActivityFile>().lambda().eq(ActivityFile::getStatus, Status.NORMAL.getCode()).eq(ActivityFile::getActivityId, resourceId)); //编辑图片:新增、删除 List<String> preUrls = activityFileList.stream().map(v -> v.getFileUrl()).collect(Collectors.toList());     七、stream().collect(Collectors.toMap)用法,生成一个map,map键是XX名称,map值是这个名称对应的对象 //   查询出list List<DbProcessMilepostNode> dbMileposts = milepostNodeService.selectAllByTenantId(TELANTID_OF_FIRST_BUILD_COMPANY, null); // 遍历成map Map<String, DbProcessMilepostNode> milepostMap = dbMileposts.stream().collect(Collectors.toMap(DbProcessMilepostNode::getMilepostName, obj -> obj));     八、Function.identity()用法,一般和toMap对应使用 List<TaskListDetailDTO> important = importantTaskService.getImportantListByUserId(userId, taskStatus, keyword); //处理登陆用户在同一个重点任务中既是负责人同时也是被抄送人或被预警人,只显示负责人那条能编辑的重点任务;如果只是被抄送人、被预警人则显示一条不能编辑的重点任务;下面的代码表示按照taskId去分组放到Map中,然后对比Map中的一组的多个TaskListDetailDTO的UserType的值,如果等于0则放回Map中,如果不等于0则返回 Map<Long, TaskListDetailDTO> collect = important.stream().collect(Collectors.toMap(TaskListDetailDTO::getTaskId, Function.identity(), (v1, v2) ->     Objects.equals(v1.getUserType(), 0) ? v1 : v2 )); Collection<TaskListDetailDTO> values = collect.values(); System.out.println(values);     九、stream().sorted用法,对list里面的对象按照时间排序 List<DateDemo> list = new ArrayList<>(); DateDemo dateDemo = new DateDemo(); dateDemo.setId(1); dateDemo.setDate(new Date()); list.add(dateDemo); dateDemo = new DateDemo(); dateDemo.setId(2); dateDemo.setDate(new Date()); list.add(dateDemo); lambda排序: // 时间升序 //List<DateDemo> listDemo = list.stream().sorted(Comparator.comparing(DateDemo::getDate)).collect(Collectors.toList()); // 时间降序 List<DateDemo> listDemo = list.stream().sorted(Comparator.comparing(DateDemo::getDate).reversed()).collect(Collectors.toList());     十、stream().allMatch用法 taskStatusList = perTaskDetailInfo.stream().map(TaskDetailInfo::getTaskStatus).collect(Collectors.toList()); ifPreTaskComplete = Optional.ofNullable(taskStatusList.stream().allMatch(obj -> !obj.equals(2))).orElse(ifPreTaskComplete);   if(taskStatusList.size()!=0){//,如果完成,则更新为启动,如果未完成则继续下面的逻辑     for(int i=0;i<taskStatusList.size();i++){         if(!taskStatusList.get(i).equals(2)){             ifPreTaskComplete = false;             break;         }     } }     以上代码都是本人在具体各个项目中用到的,然后总结出来,希望有所帮助  

标签:JDK1.8,Java,stream,list,List,list1,collect,new,Lambda
From: https://www.cnblogs.com/CarlJohnson9527/p/17143518.html

相关文章

  • java 获取当前系统 linux windows macos
    hutool工具类<dependency><groupId>com.github.oshi</groupId><artifactId>oshi-core</artifactId><version>5.6.1</version></dependency><!--https:......
  • javaDoc生成文档
    javadoc生成文档概念javadoc就是生成一个我们自己写的帮助文档; 写法使用文档注释来写:/***/packagecom.base;//写在类上的是类的文档注释......
  • 读Java实战(第二版)笔记17_反应式编程
    1. 再次出现在聚光灯下的原因1.1. 基本思想已经有二三十年的历史1.2. 大数据1.2.1. 以PB计量的大数据1.2.2. 当前互联网中流量最大的部分是移动流量1.2.3. 物......
  • Java队列
    队列队列性质队列(Queue)也是一种特殊的线性表在超市、食堂需要排队一样,我们总是排成一列,先到的人就排在前面,后来的人就排在后面,越前面的人越先完成任务,这就是队列,队......
  • Java栈
    栈栈性质栈(也叫堆栈,Stack)是一种特殊的线性表,它只能在在表尾进行插入和删除操作,就像下面这样:只能在一端进行插入和删除,当我们依次插入1、2、3、4这四个元素后,连续进......
  • JavaScript 数组遍历的五种方法(转)
    转自:JavaScript数组遍历的五种方法这篇文章主要介绍了JavaScript数组遍历的五种方法,帮助大家更好的理解和学习使用JavaScript,感兴趣的朋友可以了解下在使用JavaScri......
  • Java链表
    链表顺序表性质链表不同于顺序表,顺序表底层采用数组作为存储容器,需要分配一块连续且完整的内存空间进行使用,而链表则不需要,它通过一个指针来连接各个分散的结点,形成了......
  • IDEA+java swing+MySQL配置
    1、建立一个java项目(不是空项目)2、创建GUIForm(减少代码压力)生成代码出现了这个窗体此时说明swing已经可用了3、连接MySQL......
  • 在PHP和JavaScript中设置Cookie、会话存储(SessionStorage)和本地存储(LocalStorage)
    A.Cookie介绍Cookie:Cookie常用于识别用户,它是服务器留在用户计算机中的小文件(大小限制在4KB),每当相同的计算机通过浏览器请求页面时,它会同时发送Cookie,即Cookie是随HTTP......
  • Solon v2.1.4 发布。支持 java、kotlin、groovy!
    本次发布,重点测试和验证了在java、kotlin、groovy三种jvm语言里,开箱即用的特性。并发布SolonInitializr:https://solon.noear.org/start/(也即将发布idea插件)最......