zoukankan      html  css  js  c++  java
  • java8-2-Lambda表达式

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

    例子1:

    java7中,list集合排序:

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

    java8中,list集合排序:

        public static void testJava8SortList1() {
            List<String> 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<String> 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<String> 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<String> features1 = Arrays.asList("a", "b", "c", "d");
            for (String feature : features1) {
                System.out.println(feature);
            }
    
            // Java 8:
            List<String> 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<String> 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<String> names, Predicate<String> condition) {
            for(String name: names)  {
                if(condition.test(name)) {
                    System.out.println(name + " ");
                }
            }
        }
        public static void filter2(List<String> names, Predicate<String> 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);
  • 相关阅读:
    git查看工作状态和历史提交
    PowerDesigner工具栏palette的方法
    WCF证书制作
    ASP.NET.4 高级程序第4版 第3章Web窗体
    tbar居右显示的两种方法
    测试
    转载extj grid
    正值
    网站HTML,XHTML,XML,WML,CSS等测试验证工具介绍[转]
    SQL Server 启用“IP+端口”连接
  • 原文地址:https://www.cnblogs.com/zhaofeng555/p/8286621.html
Copyright © 2011-2022 走看看