@Test public void testSet(){ List<Map<String,Object>> list=new ArrayList<Map<String, Object>>(); Map<String,Object> map=new HashMap<String, Object>(); map.put("name","name1"); map.put("age",12); list.add(map); Map<String,Object> map2=new HashMap<String, Object>(); map2.put("name","name2"); map2.put("age",13); list.add(map2); System.out.println("排序前:"+list.toString()); list=list.stream() //第一个排序条件 //假设自定义对象为Obj,则可直接写为Obj::getName .sorted(Comparator.comparing(Application::getName) //第二个排序条件(可一直延伸) .thenComparing(Application::getAge).reversed()).collect(Collectors.toList()); System.out.println("排序后:"+list.toString()); } private static String getName(Map<String,Object> map){ return (String) map.get("name"); } private static int getAge(Map<String,Object> map){ return (int) map.get("age"); }
标签: JDK相关
Java8特性Stream中map与forEach的区别
//Map接口的定义 <R> Stream<R> map(Function<? super T, ? extends R> mapper); //forEach接口的定义 void forEach(Consumer<? super T> action);
通过接口定义可以看出,两者最明显的区别就是map有返回值,forEach没有返回值
所以在具体调用时,map调用时可以return一个对象到外部,如下:
采用java8Stream对集合进行处理
//测试数据 List<Map<Integer,Object>> list=new ArrayList<>(); list.add((Map<Integer, Object>) new HashMap<>().put(222,"222")); list.add((Map<Integer, Object>) new HashMap<>().put(111,"111")); //筛选数据 List<Map<Integer,Object>> a=list.stream().filter(info -> info.get("key").equals("123")).collect(Collectors.toList()); //排序 针对String排序系统给出了更好的解决方案,如list中为自定义对象可通过以下方法进行排序 list=list.stream().sorted(Comparator.comparing(Map::keySet)).collect(Collectors.toList());//升序 list=list.stream().sorted(Comparator.comparing(Map::keySet).reversed()).collect(Collectors.toList());//降序 //遍历集合进行操作,{}内可写入大量代码块 list.forEach((Map<Integer, Object> info)->{info.put(333,"333");}); //筛选出来的数据条数 System.out.println(list.stream().filter(info->info.equals("123")).count());
* 当前只列举出了本人近期使用频率较高的几种语法,如无特殊的业务逻辑,以上几种的组合使用已经可以在一定程度上减少大量的开发代码 * 后续如遇到其他使用频率较高的写法会持续更新进来
采用java8新特性实现自定义lambda编程
* lambda语法 Lambda允许把函数作为一个方法的参数传递进方法中 * 适用场景:在一个大块的共用逻辑中间,穿插一块非共用的逻辑,在java8之前也可以采用传入某个字段在适当位置通过switch语句进行区分 * lambda可以应用到很多的业务场景中,本文只简要说明本人所遇到的业务场景 * 代码换环境执行一定要注意jdk的版本是否大于等于1.8
import org.junit.Test; /** * @ClassName LambdaTest * @Author justin.Sun * @Date 2019/2/18 10:18 **/ public class LambdaTest { //声明接口 interface Executor{ String execute(String arg); } //调用时需要传入代码块的方法 private Object runExecute(Executor executor,String arg){ // TODO: 2019/2/18 公用代码块... //传入arg参数并执行代码块 return executor.execute(arg); } @Test public void test(){ //传入参数 String param="test"; //{}中的代码块相当于实现了上面定义的接口中的方法 System.out.println(runExecute((String arg)->{return getResult(arg);},param)); } //传入的代码块 public String getResult(String arg){ String result=arg; // TODO: 2019/2/18 逻辑块... return result; } }
* 对于自定义lambda本人也尚处于初步阶段,上文仅用于记录,如有不正之处还请指正
启动项目出现异常Unsupported major.minor version 52.0
原因: 当你使用了高版本的 JRE(如1.8) 编译出.class 文件,但是运行的时候反而使用低版本的 JRE major version: Java SE 8 = 52(当前), Java SE 7 = 51, Java SE 5.0 = 49, JDK 1.4 = 48, JDK 1.3 = 47, JDK 1.2 = 46 解决方案: 1、使用高版本的 JRE 运行,如当报错为Unsupported major.minor version 52.0时,使用 1.8 运行 基本适用所有情况 2、适用于自己编译的.class文件时,如若是第三方 jar 包引起的报错,那么可以使用以下方式 using java -target 1.6 option 以下为intellij IDEA解决此问题的步骤,同样适用于Android Studio 1、安装 JDK 1.8 2、更改 java compiler 打开Settings找到java compiler 设置project bytecode version:1.8 设置Pre-module bytecode version:对应module的version为1.8 3.更改project sdk 打开project Structure 选中project 设置project SDK为1.8 (如没有1.8选项,请在下方SDKs中添加) 设置project language level: 8-Lambdas,... 4.点击apply,ok完成
IllegalArgumentException解决
最近经常性搞一些老项目,老技术,算是了解经典了 那么在这个过程中经常会出现版本不匹配的问题 例如这次,我电脑上的jdk是1.8的 练习的技术使用的是1.7的,虽无明显报错 但是无法正常执行 启动过程一直报IllegalArgumentException 解决办法,重装jdk1.7 为了不走弯路,希望大家在开发过程中一定不要偷懒,看清楚环境要求
Eclipse启动报错,找不到jvm.dll
启动eclipse报错,根据报错信息显示可知是找不到jdk下的jvm.dll文件 对照报错信息显示的路径我们可以找到对应的文件 这种情况的话就是版本不兼容 打开eclipse.ini通过 plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20130521-0416 可知,eclipse为64位 打开cmd执行java -version 如果没有显示bit-64则说明当前jdk为32位 重新下载jdk选择名称带有x64的jdk 带有x86的为32位的jdk 下载安装之后切换JAVA_HOME路径即可
JavaJDK历史版本下载
打开百度,搜索JDK 进入到Orcle官网下载页面 选择Java SE 选择Downloads 移动到最底端 找到Java Archive选中其后的下载按钮 在跳转页选择自己想要下载的任意版本
JDK版本降低无效
依照原本安装为jdk1.8降级为jdk1.7无效为例 前提: 1.之前安装jdk版本为1.8 2.重新安装jdk1.7并将JAVA_HOME切换为1.7路径 3.点击确定后打开cmd执行java -version显示还是1.8 解决方案: 1.删除C:\Windows\System32目录下的java.exe、javaw.exe、javaws.exe三个文件 如果没有找到这些文件就跳过 2.删除环境变量Path中C:\ProgramData\Oracle\Java\javapath的配置 把path的值贴出来看一下应该会有这一段的,直接删掉重新查看版本显示1.7