[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; } }