zoukankan      html  css  js  c++  java
  • [JDK8] Lambda

    本文转载原文http://www.cnblogs.com/jalja/p/7655170.html

    一、使用线程

    public static void main(String[] args) {
            //=============================原始版==========================
            new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("简单的线程编程JDK1.8以前");
                }
            }).start();
            //=====================Lambda可读性强一些================================
            new Thread(()->{System.out.println("Lambda可读性强一些");}).start();
            //=====================Lambda简洁一些================================
            new Thread(()->System.out.println("Lambda简洁一些")).start();
        }

    Runnable接口源码:

    @FunctionalInterface
    public interface Runnable {
        public abstract void run();
    }

    该接口只有一个抽象方法,且该抽象没有参数 所以Lambda 表达式为 ();   System.out.println("简单的线程编程JDK1.8") 是实现该接口覆盖run方法的具体实现逻辑。所以最终Runnable接口的最终实现代码用Lambda表达式实现为:() -> System.out.println("简单的线程编程JDK1.8")。

    二、使用  Collections.sort 排序

    public static void testComparatorLambda(){
            List<Integer> names = Arrays.asList(1, 10, 3, 2,1);
            //=========================创建一个匿名的比较器对象=====================
            Collections.sort(names, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    System.out.println("o1:"+o1+"<>o2:"+o2+"=="+o1.compareTo(o2));
                    return o1.compareTo(o2);
                }
            });
            //==========================使用Lambda=================================
            Collections.sort(names,(Integer o1,Integer o2)->{
                            System.out.println("o1:"+o1+"<>o2:"+o2+"=="+o1.compareTo(o2));
                            return o1.compareTo(o2);
                          } );
            System.err.println(names);
        }
    @FunctionalInterface
    public interface Comparator<T> {
      int compare(T o1, T o2);
    }

    Compoarator接口的compare方法有两个参数 所以Lambda 表达式为 (Integer o1,Integer o2);   {System.out.println("o1:"+o1+"<>o2:"+o2+"=="+o1.compareTo(o2));return o1.compareTo(o2);} 是实现该接口覆盖compare方法的具体实现逻辑。所以最终Compoarator接口的最终实现代码用Lambda表达式实现为:(Integer o1,Integer o2)->{ System.out.println("o1:"+o1+"<>o2:"+o2+"=="+o1.compareTo(o2)); return o1.compareTo(o2);} 

    三、自己模拟业务使用Lambda表达式实现

    业务:从一堆苹果中选出红色的苹果。

    建立一个苹果类

    class Apple{
        private String color;
        private Integer weight;
        构造函数
        get,set
    }

    一个策略接口

    interface AppleFilter{
        boolean validate(Apple apple);
    }

    业务实现:

    public class LambdaAgo {
        public static void main(String[] args) {
            List<Apple> apples=Arrays.asList(new Apple("red",120),new Apple("green",189),new Apple("red",110));
            //===方法一 使用内部类======
            getAppleFilter(apples,new AppleFilter() {
                @Override
                public boolean validate(Apple apple) {
                    return apple.getColor().equals("red");
                }
            });
            //===方法二 使用 Lambda======
            getAppleFilter(apples,(Apple apple)-> apple.getColor().equals("red"));
        
        }
        public static List<Apple> getAppleFilter(List<Apple> apples,AppleFilter filter){
            List<Apple> apples2=new ArrayList<Apple>();
            for(Apple a:apples){
                if(filter.validate(a)){
                    apples2.add(a);
                }
            }
            System.out.println("getAppleFilter:"+apples2);
            return apples2;
        }
    }
  • 相关阅读:
    IntelliJ IDEA常用统一设置2-Inspections检查设置(Linux/Mac/Windows)
    IntelliJ IDEA版本:Ultimate、Community、EAP版本的区别
    IntelliJ IDEA重构技巧收集
    Java泛型中的类型擦除机制简单理解
    阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
    Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图(转)
    Java使用logback记录日志时分级别保存文件
    Java中List,Set和Map详解及其区别和使用场景(转)
    Java中泛型的Class<Object>与Class<?>的区别(转)
    Java中泛型T和Class<T>以及Class<?>的理解(转)
  • 原文地址:https://www.cnblogs.com/Joy-Hu/p/7662276.html
Copyright © 2011-2022 走看看