前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java8之行为参数化,你用了吗?

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

作者头像
我的小熊不见了丶
发布2019-05-23 00:03:52
4750
发布2019-05-23 00:03:52
举报
文章被收录于专栏:晓月寒·晓月寒·晓月寒·

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);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • java8之行为参数化,你用了吗?
    • 需求1,将库存中的苹果按照重量排序:
      • 需求2,找到当前文件夹下所有的隐藏文件:
      • 选苹果
        • 选出仓库中所有的绿苹果
          • 选出重量大于150克的苹果
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档