Java8新特性之Lambda:比较器示例

Java8已经出来有一段时间了,却一直没有来得及去看看他有些什么新奇的东西。最近无意之中看到之前自己收藏的一本书《Java 8 in Action》,感觉写得不错,给大家推荐一下,示例比较多,需要的同学可以下载,已经上传到CSDN:http://download.csdn.net/detail/qq_26718271/9754904。
今天先看看Lambda 表达式的简单使用:
首先:Lambda表达式的基本语法:(parameters) -> expression或(请注意语句的花括号)
(parameters) -> { statements; }
第一感觉就是这个箭头感觉有点怪,不过多用几次习惯就好,它主要是为了把参数列表与Lambda主体分隔开,箭头左边的是参数列表,右边的是Lambda主体。注意:Lambda表达式可以包含多行语句。
在用Lambda 之前,我们先看看之前写比较器的写法

Comparator byName = new Comparator() {
    @Override
    public int compare(Developer o1, Developer o2) {
        return o1.getName().compareTo(o2.getName());
    }
};

感觉也不是很复杂,没几行代码,再来看看Lambda 表达式的写法:

Comparator byName =
    (Developer o1, Developer o2)->o1.getName().compareTo(o2.getName());

比之前要简单许多有木有。
下面再来看看排序功能示例:
先用Collections.sort如下:

public class TestSorting {
    public static void main(String[] args) {
        List listDevs = getDevelopers();
        System.out.println("Before Sort");
        for (Developer developer : listDevs) {
            System.out.println(developer);
        }
        //安装年龄排序
        Collections.sort(listDevs, new Comparator() {
            @Override
            public int compare(Developer o1, Developer o2) {
                return o1.getAge() - o2.getAge();
            }
        });
        System.out.println("After Sort");
        for (Developer developer : listDevs) {
            System.out.println(developer);
        }
    }
    private static List getDevelopers() {
        List result = new ArrayList();
        result.add(new Developer("mkyong", new BigDecimal("70000"), 33));
        result.add(new Developer("alvin", new BigDecimal("80000"), 20));
        result.add(new Developer("jason", new BigDecimal("100000"), 10));
        result.add(new Developer("iris", new BigDecimal("170000"), 55));
        return result;
    }
}

输出结果:

Before Sort
Developer [name=mkyong, salary=70000, age=33]
Developer [name=alvin, salary=80000, age=20]
Developer [name=jason, salary=100000, age=10]
Developer [name=iris, salary=170000, age=55]

After Sort
Developer [name=jason, salary=100000, age=10]
Developer [name=alvin, salary=80000, age=20]
Developer [name=mkyong, salary=70000, age=33]
Developer [name=iris, salary=170000, age=55]

看起来整个流程完全没毛病,下面再来看看Lambda的方式:

public class TestSorting {
    public static void main(String[] args) {
        List listDevs = getDevelopers();
        System.out.println("Before Sort");
        for (Developer developer : listDevs) {
            System.out.println(developer);
        }
        System.out.println("After Sort");
        //对比上面的代码
        listDevs.sort((Developer o1, Developer o2)->o1.getAge()-o2.getAge());
        //这样打印感觉也不错
        listDevs.forEach((developer)->System.out.println(developer));
    }
    private static List<Developer> getDevelopers() {
        List<Developer> result = new ArrayList<Developer>();
        result.add(new Developer("mkyong", new BigDecimal("70000"), 33));
        result.add(new Developer("alvin", new BigDecimal("80000"), 20));
        result.add(new Developer("jason", new BigDecimal("100000"), 10));
        result.add(new Developer("iris", new BigDecimal("170000"), 55));
        return result;
    }
}

输出结果:

Before Sort
Developer [name=mkyong, salary=70000, age=33]
Developer [name=alvin, salary=80000, age=20]
Developer [name=jason, salary=100000, age=10]
Developer [name=iris, salary=170000, age=55]

After Sort
Developer [name=jason, salary=100000, age=10]
Developer [name=alvin, salary=80000, age=20]
Developer [name=mkyong, salary=70000, age=33]
Developer [name=iris, salary=170000, age=55]

总体来说,写法与之前有较大的改变,写的代码更少,更简便,感觉还不错。
后续会带来更多有关Java8相关的东西,毕竟作为一只程序狗,得不停的学习才能不被淘汰。Java语言都在不停的改进更新,我们有啥理由不跟上节奏呢?
由于时间问题这里只是一个简单的应用,想了解更多可到官网查找相关示例。

你可能感兴趣的:(Java8)