美文网首页
java8 简明教程

java8 简明教程

作者: 朝明 | 来源:发表于2019-03-14 16:21 被阅读0次

哥哥做了佛 弟弟做了恶人,弟弟对哥哥说安心做你的佛 渡不了的人交给我!

0314154809.jpg

Lambda表达式

让我们从最简单的例子开始,来学习如何对一个string列表进行排序。我们首先使用Java 8之前的方法来实现:

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

静态工具方法Collections.sort接受一个list,和一个Comparator接口作为输入参数,Comparator的实现类可以对输入的list中的元素进行比较。通常情况下,你可以直接用创建匿名Comparator对象,并把它作为参数传递给sort方法。


除了创建匿名对象以外,Java 8 还提供了一种更简洁的方式,Lambda表达式。

Collections.sort(names, (String a, String b) -> {
    return b.compareTo(a);
});

Optional

Optional是一个严重被低估的功能,并且有潜力删除很多困扰我们的NullPointerExceptions。这在代码边界中(要么是正在使用的API,要么是正在暴露的API)特别有用,因为它允许你和你的调用代码来推理所期待的东西。

我们就可以把下面这样的代码进行改写。

oldways

不过,千万不要改写成这副样子

newways

这样改写非但不简洁,而且其操作还是和第一段代码一样。

无非就是用isPresent方法来替代u==null。这样的改写并不是Optional正确的用法,我们再来改写一次。

was1

这样才是正确使用Optional的姿势。那么按照这种思路,我们可以安心的进行链式调用,而不是一层层判断了。看一段代码:

public static String getChampionName(Competition comp) throws IllegalArgumentException {
    if (comp != null) {
        CompResult result = comp.getResult();
        if (result != null) {
            User champion = result.getChampion();
            if (champion != null) {
                return champion.getName();
            }
        }
    }
    throw new IllegalArgumentException("The value of param comp isn't available.");
}

让我们使用Optional,这些代码会变成什么样子。

public static String getChampionName(Competition comp) throws IllegalArgumentException {
    return Optional.ofNullable(comp)
            .map(c->c.getResult())
            .map(r->r.getChampion())
            .map(u->u.getName())
            .orElseThrow(()->new IllegalArgumentException("The value of param comp isn't available."));
}

相关文章

网友评论

      本文标题:java8 简明教程

      本文链接:https://www.haomeiwen.com/subject/rblcmqtx.html