美文网首页
java8之行为参数化,你用了吗?

java8之行为参数化,你用了吗?

作者: 我的小熊不见了 | 来源:发表于2019-03-06 19:21 被阅读8次

java8之行为参数化,你用了吗?

java8新增加了方法引用::语法(将方法作为参数)。将方法的引用传递进去,可以极大地简化你的代码。

需求1,将库存中的苹果按照重量排序:

在java8之前应该是这么写:

Collections.sort(inventory, new Comparator<Apple>(){
    public int compare(Apple a1, Apple a2) {
        return a1.getWeight().compareTo(a2.getWeight());
    }
})

在java8中,可以这么实现:

inventory.sort(comparing(Apple::getWeight);

需求2,找到当前文件夹下所有的隐藏文件:

在java8之前应该是这么写:

File[] hiddenFiles = new File(".").listFiles(new FileFilter(){
    public boolean accept(File file) {
        return file.isHidden();
    }
})

需要将方法用对象包装,然后将对象传递进去。

在java8中,可以这么实现:

File[] hiddenFiles = new File(".").listFiles(File::isHidden);

直接传递方法引用。

选苹果

选出仓库中所有的绿苹果

在java8之前应该是这么写:

public static List<Apple> filterGreenApple(List<Apple> inventory){
    List<Apple> result = new ArrayList<>();
    for (Apple apple : inventory){
        if ("green".equals(apple.getColor())) {
            result.add(apple);
        }
    }
}

选出重量大于150克的苹果

在java8之前应该是这么写:

public static List<Apple> filterHeavyApples(List<Apple> inventory){
    List<Apple> result = new ArrayList<>();
    for (Apple apple : inventory) {
        if (apple.getWeight() > 150) {
            result.add(apple);
        }
    }
}

在java8中,可以这么实现:

public static boolean isGreenApple(Apple apple) {
    return "green".equals(apple.getColor());
}
public static boolean isHeavyApple(Apple apple) {
    return apple.getWeight() > 150;
}
public interface Predicate<T>{
    boolean test(T t);
}
static List<Apple> filterApples(List<Apple> inventory, Predicate<Apple> p) {
     List<Apple> result = new ArrayList<>();
     for (Apple apple : inventory) {
         if (p.test(apple)) {
             result.add(apple);
         }
     }
    return result;
}
// 使用
filterApples(inventory, Apple::isGreenApple);
filterApples(inventory, Apple::isHeavyApple);

如果你觉得这么用太麻烦了,也可以使用以下方式:

filterApples(inventory, (Apple a) -> "green".equals(a.getColor()));
filterApples(inventory, (Apple a) -> a.getWeight() > 150);

相关文章

  • java8之行为参数化,你用了吗?

    java8之行为参数化,你用了吗? java8新增加了方法引用::语法(将方法作为参数)。将方法的引用传递进去,可...

  • Lambda表达式知识手册

    1.行为参数化 行为参数化是将方法的具体实现抽象化,java8之前可以使用接口(策略模式,根据不同需求需要编写...

  • Java8新特性

    Java8新特性 Project 01 给出了行为参数化传递代码的方式 定义一个标准的谓词模板 用ApplePre...

  • 【Java8】Java8实战之Stream

    Java8实战之Stream 前言 在前面一个小节中,我们已经学习了行为参数化以及Lambda表达式,通过Lamb...

  • Java8函数式编程之二 : Lambda表达式

    针对上篇博客Java8函数式编程之一: 行为参数化 - 简书最后留下的问题,也就是java8怎样解决匿名内部类代码...

  • java8 in action行为参数化

    行为参数化:拿出一个代码块,把它准备好却不去执行它。这个代码块以后可以被你程序的其他部分调用,这意味着你可以推迟这...

  • java8学习:行为参数化

    将“行为“作为参数,传进函数,然后去执行 直接上例子 目标:获取所有颜色为绿色的苹果 对象:苹果列表 行为:筛选出...

  • 行为参数化------Java8 in action

    行为参数化是一种类似于策略设计模式的模式,可以轻松地适应不断变化的需求。 具体而言:行为参数化就是让一个方法接受多...

  • java8之通过行为参数化传递代码

    在实习的这一段时间里,我深刻体会到一个道理,就是用户的需求不断的在变化,因而自己的代码也要进行重构,这说明了一个问...

  • Java8 学习总结 - 基本思想

    1. 行为参数化 在java8之前, 我们想给方法传递不同的行为, 最好的办法就是匿名类了:比如下面我们想从一个装...

网友评论

      本文标题:java8之行为参数化,你用了吗?

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