博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java8-2-Lambda表达式
阅读量:4700 次
发布时间:2019-06-09

本文共 3940 字,大约阅读时间需要 13 分钟。

java8的lambda表达式:使得代码更加紧凑;修改方法的能力;更好的支持多核处理(并行处理函数和filter\map\reduce)

例子1:

java7中,list集合排序:

public static void testJava7SortList() {        List
names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, new Comparator
() { @Override public int compare(String a, String b) { return b.compareTo(a); } }); System.out.println(names); }

java8中,list集合排序:

 

public static void testJava8SortList1() {        List
names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, (String a, String b) -> { return b.compareTo(a); }); System.out.println(names); } public static void testJava8SortList2() { List
names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, (String a, String b) -> b.compareTo(a)); System.out.println(names); } // 只要一行代码,包含了方法体。你甚至可以连大括号对{}和return关键字都省略不要。不过这还不是最短的写法 // Java编译器能够自动识别参数的类型,所以你就可以省略掉类型不写 public static void testJava8SortList3() { List
names = Arrays.asList("peter", "anna", "mike", "xenia"); Collections.sort(names, (a, b) -> b.compareTo(a)); System.out.println(names); }

 

例子2:

Thread的处理:

public static void testJava8Thread() {        // Java 7:        new Thread(new Runnable() {            @Override            public void run() {                System.out.println("java7 thread");            }        }).start();        // Java 8方式:        new Thread(() -> System.out.println("java8 thread")).start();        try {            Thread.sleep(1000L);        } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }

例子3:

迭代处理:

public static void testForEach() {        // Java 7:        List
features1 = Arrays.asList("a", "b", "c", "d"); for (String feature : features1) { System.out.println(feature); } // Java 8: List
features2 = Arrays.asList("a", "b", "c", "d"); features2.forEach(n -> System.out.println(n)); // 使用Java 8的方法引用更方便,方法引用由::双冒号操作符标示, // 看起来像C++的作用域解析运算符 features2.forEach(System.out::println); }

 

例子4:

labmda表达式和函数试接口:

java.util.function。它包含了很多类,用来支持Java的函数式编程。其中一个便是Predicate,使用 java.util.function.Predicate 函数式接口以及lambda表达式,可以向API方法添加逻辑,用更少的代码支持更多的动态行为。

public static void testLambdaFilter() {        List
languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp"); //查询J开头的字符串 System.out.println("Languages which starts with J :"); filter(languages, (str)->str.startsWith("J")); //查询出所有 System.out.println("Print all languages :"); filter(languages, (str)->true); } public static void filter(List
names, Predicate
condition) { for(String name: names) { if(condition.test(name)) { System.out.println(name + " "); } } } public static void filter2(List
names, Predicate
condition) { names.stream().filter((name) -> (condition.test(name))).forEach((name) -> { System.out.println(name + " "); }); }

例子5:

 函数式编程概念map

// 为每个订单加上12%的税// 老方法:List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);double total = 0;for (Integer cost : costBeforeTax) {    double price = cost + .12*cost;    total = total + price;}System.out.println("Total : " + total); // 新方法:List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);double bill = costBeforeTax.stream().map((cost) -> cost + .12*cost).reduce((sum, cost) -> sum + cost).get();System.out.println("Total : " + bill);

 

 

 

转载于:https://www.cnblogs.com/zhaofeng555/p/8286621.html

你可能感兴趣的文章
Ubuntu安装搜狗拼音教程
查看>>
Happy Number
查看>>
Sqlserver 系统视图简单说明
查看>>
【摘录】PHP异步调用实现方式
查看>>
php缓存机制
查看>>
bzoj2049 线段树 + 可撤销并查集
查看>>
sql语句---存在即更新,否则insert
查看>>
cookie机制、session机制
查看>>
BZOJ 3787: Gty的文艺妹子序列
查看>>
Comet OJ - Contest #5 简要题解
查看>>
CF1093G Multidimensional Queries
查看>>
移动端提升页面速度与网站性能
查看>>
Dfs【p4906】小奔关闹钟
查看>>
【JMeter4.0】之遇到的问题总结(持续更新)
查看>>
计算机编码总结
查看>>
codevs 2964公共素数因数
查看>>
分组查询限制。HAVING可写在GROUP BY前。
查看>>
基于iSensor的MT9M001C12STM传感器调试总结
查看>>
Analyze network packet files very carefully
查看>>
android下的user agent webkit (android xxx.x sony ericsson x10i) iphone ( ios )
查看>>