Java基础知识四
1.Collections排序
使用Collections.sort可以对list进行排序,指定排序的规则
1 | List<JSONObject> siteList=new ArrayList<JSONObject>(re); |
直接使用Lambda表达式进行了排序
1 | dataResult.sort((a,b)->{ |
参考文章:
1.Java中Collections.sort()排序详解
2.Java使用Collections.sort()排序的示例详解
3.Java中如何比较两个字符串类型日期的大小
4.java中集合Collection转list对象
5.java中Collections.sort排序详解 compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。
6.jsonArray中按字段排序 这里直接使用了lambda表达式进行了排序
7.java 8 对JSONArray 按指定字段排序,升序和倒序,经典
1.Java中Collections.sort()排序详解
2.Java使用Collections.sort()排序的示例详解
3.Java中如何比较两个字符串类型日期的大小
4.java中集合Collection转list对象
5.java中Collections.sort排序详解 compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。
6.jsonArray中按字段排序 这里直接使用了lambda表达式进行了排序
7.java 8 对JSONArray 按指定字段排序,升序和倒序,经典
2.线程池
我使用了 ExecutorService 创建了线程池,然后执行了 文件上传的任务,最后通过检查是否全部线程结束了,再进行下一步操作。
1 | private int NUM_THREADS=30; |
参考文章:
【1】.线程池如何保证所有子线程运行完再执行主线程
【2】.ExecutorService多线程同步,待所有线程执行结束后主线程继续运行 这里用了 Future f : fuList 的方法。
【3】.ExecutorService——shutdown方法和awaitTermination方法 这里用了一个 while 循环检查线程池是否结束
【4】.Cannot resolve symbol ‘TimeUnit‘ 这里也是出现了无法导入 TimeUnit 的问题
【5】.JDK21无法导入TimeUnit类 升级idea版本
【6】.java 并发之awaitTermination的使用 当使用awaitTermination时,主线程会处于一种等待的状态,等待线程池中所有的线程都运行完毕后才继续运行。如果等待的时间超过指定的时间,但是线程池中的线程运行完毕,那么awaitTermination()返回true。如果等待的时间超过指定的时间,但是线程池中的线程未运行完毕,那么awaitTermination()返回false。如果等待时间没有超过指定时间,等待!
【7】.ExecutorService等待线程完成后优雅结束 1.等待现有线程完成执行可以通过使用awaitTermination()方法来实现。2.使用CountDownLatch。3.使用invokeAll()。4.使用ExecutorCompletionService。
【8】.java多线程-向线程传递参数的三种方法 1.通过构造函数进行传递;2.通过变量和方法传递数据;3.通过回调函数传递数据;
【9】.【并发编程】- 线程池使用方法awaitTermination监听关闭状态 方法awaitTermination(long timeout,TimeUnit unit)的作用是查看在指定的时间之间,线程池是否已经终止工作,就是最多等待多少时间后去判断线程池是否已经停止工作了。
【10】.ExecutorService——shutdown方法和awaitTermination方法 shutdown和awaitTermination为接口ExecutorService定义的两个方法,一般情况配合使用来关闭线程池。
【11】.java并发中ExecutorService的使用 submit() 和 invokeAll() 都会返回Future对象。
【12】.Java线程池:ExecutorService 的理解与使用 1.方法 execute(Runnable) 接收壹個 java.lang.Runnable 对象作为参数,并且以异步的方式执行它。2.方法 submit(Runnable) 同样接收壹個 Runnable 的实现作为参数,但是会返回壹個 Future 对象。这個 Future 对象可以用于判断 Runnable 是否结束执行。3.方法 submit(Callable) 和方法 submit(Runnable) 比较类似,但是区别则在于它们接收不同的参数类型。Callable 的实例与 Runnable 的实例很类似,但是 Callable 的 call() 方法可以返回壹個结果。方法 Runnable.run() 则不能返回结果。4.方法 invokeAny() 接收壹個包含 Callable 对象的集合作为参数。调用该方法不会返回 Future 对象,而是返回集合中某壹個 Callable 对象的结果,而且无法保证调用之后返回的结果是哪壹個 Callable,只知道它是这些 Callable 中壹個执行结束的 Callable 对象。如果壹個任务运行完毕或者抛出异常,方法会取消其它的 Callable 的执行。5.方法 invokeAll() 会调用存在于参数集合中的所有 Callable 对象,并且返回壹個包含 Future 对象的集合,你可以通过这個返回的集合来管理每個 Callable 的执行结果。需要注意的是,任务有可能因为异常而导致运行结束,所以它可能并不是真的成功运行了。但是我们没有办法通过 Future 对象来了解到这個差异。
【1】.线程池如何保证所有子线程运行完再执行主线程
【2】.ExecutorService多线程同步,待所有线程执行结束后主线程继续运行 这里用了 Future
【3】.ExecutorService——shutdown方法和awaitTermination方法 这里用了一个 while 循环检查线程池是否结束
【4】.Cannot resolve symbol ‘TimeUnit‘ 这里也是出现了无法导入 TimeUnit 的问题
【5】.JDK21无法导入TimeUnit类 升级idea版本
【6】.java 并发之awaitTermination的使用 当使用awaitTermination时,主线程会处于一种等待的状态,等待线程池中所有的线程都运行完毕后才继续运行。如果等待的时间超过指定的时间,但是线程池中的线程运行完毕,那么awaitTermination()返回true。如果等待的时间超过指定的时间,但是线程池中的线程未运行完毕,那么awaitTermination()返回false。如果等待时间没有超过指定时间,等待!
【7】.ExecutorService等待线程完成后优雅结束 1.等待现有线程完成执行可以通过使用awaitTermination()方法来实现。2.使用CountDownLatch。3.使用invokeAll()。4.使用ExecutorCompletionService。
【8】.java多线程-向线程传递参数的三种方法 1.通过构造函数进行传递;2.通过变量和方法传递数据;3.通过回调函数传递数据;
【9】.【并发编程】- 线程池使用方法awaitTermination监听关闭状态 方法awaitTermination(long timeout,TimeUnit unit)的作用是查看在指定的时间之间,线程池是否已经终止工作,就是最多等待多少时间后去判断线程池是否已经停止工作了。
【10】.ExecutorService——shutdown方法和awaitTermination方法 shutdown和awaitTermination为接口ExecutorService定义的两个方法,一般情况配合使用来关闭线程池。
【11】.java并发中ExecutorService的使用 submit() 和 invokeAll() 都会返回Future对象。
【12】.Java线程池:ExecutorService 的理解与使用 1.方法 execute(Runnable) 接收壹個 java.lang.Runnable 对象作为参数,并且以异步的方式执行它。2.方法 submit(Runnable) 同样接收壹個 Runnable 的实现作为参数,但是会返回壹個 Future 对象。这個 Future 对象可以用于判断 Runnable 是否结束执行。3.方法 submit(Callable) 和方法 submit(Runnable) 比较类似,但是区别则在于它们接收不同的参数类型。Callable 的实例与 Runnable 的实例很类似,但是 Callable 的 call() 方法可以返回壹個结果。方法 Runnable.run() 则不能返回结果。4.方法 invokeAny() 接收壹個包含 Callable 对象的集合作为参数。调用该方法不会返回 Future 对象,而是返回集合中某壹個 Callable 对象的结果,而且无法保证调用之后返回的结果是哪壹個 Callable,只知道它是这些 Callable 中壹個执行结束的 Callable 对象。如果壹個任务运行完毕或者抛出异常,方法会取消其它的 Callable 的执行。5.方法 invokeAll() 会调用存在于参数集合中的所有 Callable 对象,并且返回壹個包含 Future 对象的集合,你可以通过这個返回的集合来管理每個 Callable 的执行结果。需要注意的是,任务有可能因为异常而导致运行结束,所以它可能并不是真的成功运行了。但是我们没有办法通过 Future 对象来了解到这個差异。
3.接收文件数组
参考文章:
【1】.java上传MultipartFile数组 在Spring框架中,我们可以使用@RequestParam(“files”) MultipartFile[] files来接收上传的多个文件。
【2】.java入门006~springboot实现多文件的上传(java多文件的上传) MultipartFile[] uploadFiles, HttpServletRequest request
【1】.java上传MultipartFile数组 在Spring框架中,我们可以使用@RequestParam(“files”) MultipartFile[] files来接收上传的多个文件。
【2】.java入门006~springboot实现多文件的上传(java多文件的上传) MultipartFile[] uploadFiles, HttpServletRequest request
4.下载文件中文乱码
1 | String fileName = gTable.entityInfo()+".xls"; |
参考文章:
【1】.Java下载文件,中文文件名乱码问题解决
【2】.【文件下载】Java下载文件的几种方式 1.以流的方式下载;2.下载本地文件;3.下载网络文件;4.支持在线打开的方式;
【3】.下载文件时文件名乱码问题
【1】.Java下载文件,中文文件名乱码问题解决
【2】.【文件下载】Java下载文件的几种方式 1.以流的方式下载;2.下载本地文件;3.下载网络文件;4.支持在线打开的方式;
【3】.下载文件时文件名乱码问题