美文网首页Google Guava学习笔记
Guava函数式编程(2)

Guava函数式编程(2)

作者: Viking_Den | 来源:发表于2016-09-16 11:48 被阅读98次

使用Predicate接口

可以说Predicate接口和Function接口是具有相似的功能,Predicate接口也有两个方法:

public interface Predicate<T> {
   boolean apply(T input)
   boolean equals(Object object)
}

可以看出Predicate返回时boolean类型,对比Function接口主要是对输入的对象进行变换,而Predicate接口是对输入对象的过滤。
简单的示例,比如过滤出上一章节中所有城市中人口最小值的城市:

public class PopulationPredicate implements Predicate<City> {
     @Override
     public boolean apply(City input) {
           return input.getPopulation() <= 500000;
     }
}

使用Predicates类

直接上代码,定义两个关于城市特性的Predicate接口实现类:

public class TemperateClimatePredicate implements Predicate<City> {
   @Override
   public boolean apply(City input) {
         return input.getClimate().equals(Climate.TEMPERATE);
   }
}

public class LowRainfallPredicate implements Predicate<City> {
   @Override
   public boolean apply(City input) {
       return input.getAverageRainfall() < 45.7;
   }
}
  • 使用Predicates.and
    Predicates.and方法里面接收Predicate接口的实现类,参数是可变参数,也就是说,组合每个Predicate,只有当所有的Predicate实现类的apply方法返回true,才符合条件:
Predicate smallAndDry =  Predicates.and(smallPopulationPredicate,lowRainFallPredicate);

如上的smallAndDry表示城市要同时人口少于500000,并且降雨量小于45.7。
Predicates.and方法参数有下面两个:

Predicates.and(Iterable<Predicate<T>> predicates);
Predicates.and(Predicate<T> ...predicates);
  • 使用Predicates.or
    Predicates.or,表示只要给定的Predicate接口中的一个apply方法返回true,则成立。还有,如果有三个Predicate,第一个就成立了,就直接返回,后面的Predicate不会继续处理。
Predicate smallTemperate =
Predicates.or(smallPopulationPredicate,temperateClimatePredicate);

上面表示,在所有的城市中过滤,人口小于50000,或者降雨量小于45.7的城市。
同样的,Predicates.or有下面两个参数方法:

Predicates.or(Iterable<Predicate<T>> predicates);
Predicates.or(Predicate<T> ...predicates);

*使用Predicates.not
Predicates.not就是相反的,如果apply方法返回true,则为false;反之,则为true;

Predicate largeCityPredicate = Predicate.not(smallPopulationPredicate);
  • Predicates.compose
    Predicates.compose 可以结合使用Function接口的实现类和Predicate接口的实现类:
public class SouthwestOrMidwestRegionPredicate implements Predicate<State> {
       @Override
       public boolean apply(State input) {
             return input.getRegion().equals(Region.MIDWEST) ||
                       input.getRegion().equals(Region.SOUTHWEST);
       }
  }

下面就通过compose方法过滤出MIDWEST和SOUTHWEST的城市:

Predicate<String> predicate = Predicates.compose(southwestOrMidwestRegionPredicate,lookup);

相关文章

  • Guava函数式编程(2)

    使用Predicate接口 可以说Predicate接口和Function接口是具有相似的功能,Predicate...

  • Guava函数式编程

    函数式编程 截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果。预计JDK8中会有所改变...

  • Guava函数式编程(1)

    本章节主要介绍以下几个接口和类: Function和Functions Predicate和Predicates ...

  • Guava函数式编程(3)

    使用Supplier接口 Supplier接口只要一个方法: 非常简单的一个定义,简而言之,得到一个对象。但它有什...

  • Python函数式编程

    一、函数式编程简介 函数式: functional 一种编程范式。函数式编程的特点:1.把计算视为函数而非指令2....

  • Python进阶笔记

    文|Seraph 函数式编程 1 纯函数式编程:不需要变量、没有副作用、测试简单2 Python不是纯函数式编程(...

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • javascript 函数式编程

    1.函数式编程是什么 为什么要函数式编程 我眼中的 JavaScript 函数式编程 2.什么是函数组合 征服 J...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

  • Scala 入门

    1 函数式编程思想 1.1 介绍 1.2 scala函数式编程思想 2 环境搭建 3 实战 4 变量 函数 函数定...

网友评论

    本文标题:Guava函数式编程(2)

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