之前对于Java的版本概念不是很强烈,从Java5中学习到的那些语法足以满足日常开发中的需要,最近迷恋上了IDEA
,对于其提示出来的语法建议深感自身知识的落伍。
在这篇文章中,将汇集再发现到新语法或者特性时将会补充。
语法
lambda
lambda也称为闭包
或匿名方法
,方法的参数为方法。
它可以自动推导出参数类型,也就是说编译器根据参数类型可以推导出用哪个类,用哪个方法去执行表达式里要执行的方法
lambda最先出现在其他语言中,从Java8才进入此语法,此语法确实带来了更好的阅读以及代码量的减少。
以下已一些常用类加以说明[BEFORE:之前的语法 AFTER:使用lambda的语法]。
List:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3");
//BEFORE: for(String i:list){ System.out.println(i); }
list.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } });
//AFTER:
list.forEach((val) -> System.out.println(val));
list.forEach(System.out::println);
//BEFORE: list.sort(new Comparator<String>() { @Override public int compare(String v1, String v2) { return v1.compareTo(v2); } });
//AFTER: list.sort((v1, v2) -> v1.compareTo(v2));
list.sort(String::compareTo);
|
Map:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Map<String,String> map = new HashMap<>(); map.put("k1","v1");`` map.put("k2","v2"); map.put("k3","v3");
map.forEach(new BiConsumer<String, String>() { @Override public void accept(String key, String val) { System.out.println(key+"-"+val); } });
map.forEach((key, val) -> System.out.println(key + "-" + val));
|
参考资料:
1.IDEA官网对于语法提示的一些解释