zoukankan      html  css  js  c++  java
  • guava学习--Function、Predicate

    Function用于同步转换。

    Predicate用于过滤。

    import java.util.Collection;

    import java.util.Iterator;

    import java.util.List;

    import java.util.Map;

    import com.google.common.base.Function;

    import com.google.common.base.Functions;

    import com.google.common.base.Objects;

    import com.google.common.base.Predicate;

    import com.google.common.collect.Collections2;

    import com.google.common.collect.Iterators;

    import com.google.common.collect.Lists;

    import com.google.common.collect.Maps;

     

    public class User {

    private String username;

     

    private String sex;

     

    public User(String username, String sex) {

    this.username = username;

    this.sex = sex;

    }

     

    void setUsername(String username) {

    this.username = username;

    }

     

    void setSex(String sex) {

    this.sex = sex;

    }

     

    String getUsername() {

     

    return username;

    }

     

    String getSex() {

    return sex;

    }

     

    @Override

    public String toString() {

    return Objects.toStringHelper(this).omitNullValues().add("username", username).add("sex", sex).toString();

    }

     

    public static void main(String[] args) {

    User u1 = new User("malone", "man");

    User u2 = new User("lanlan", "woman");

    List<User> list = Lists.newArrayList(u1, u2);

     

    // Function 这里用于类型转换

    Collection<String> result = Collections2.transform(list, new Function<User, String>() {

    @Override

    public String apply(User user) {

    if (Objects.equal(user, null)) {

    return "";

    }

    return user.toString();

    }

    });

     

    for (String ss : result) {

    System.out.println(ss);

    }

     

    // Predicate 这里是用于过滤

    Collection<User> resultUser = Collections2.filter(list, new Predicate<User>() {

    @Override

    public boolean apply(User user) {

    if (Objects.equal(user, null)) {

    return false;

    }

    if (Objects.equal(user.getSex(), "woman")) {

    return false;

    }

    return true;

    }

    });

     

    for (User ss : resultUser) {

    System.out.println(ss);

    }

     

    Function<User, String> f1 = new Function<User, String>() {

    @Override

    public String apply(User user) {

    if (Objects.equal(user, null)) {

    return "";

    }

    return user.getUsername();

    }

    };

    // 多个工具类均可使用类函数式编程

    Collection<String> result1 = Collections2.transform(list, f1);

    for (String ss : result1) {

    System.out.println("1:" + ss);

    }

    List<String> strList = Lists.transform(list, f1);

    for (String ss : strList) {

    System.out.println("2:" + ss);

    }

    Iterator<String> it = Iterators.transform(list.iterator(), f1);

    while (it.hasNext()) {

    System.out.println("3:" + it.next());

    }

     

    Function<String, String> f2 = new Function<String, String>() {

    @Override

    public String apply(String input) {

    if (Objects.equal(input, "malone")) {

    return "malone's function";

    } else {

    return "lanlan's function";

    }

    }

    };

    // 连接多个Function

    // Warning:这里compose方法的参数位置不能颠倒,

    //        * Function<A, C> compose(Function<B, C> g, Function<A, ? extends B> f)

    //        * 传入Function<B,C>、Function<A, ? extends B>组合成Function<A, C>

    Function<User, String> f3 = Functions.compose(f2, f1);

    List<String> mylist = Lists.transform(list, f3);

    System.out.println(mylist.get(0));

     

    Map<String, String> map = Maps.newHashMap();

    map.put("1", "2");

    // Functions可以转换一下map,使用语义更直白的代码,并提供默认值支持

    Function<String, String> lookup = Functions.forMap(map, "default value");

    System.out.println(lookup.apply("1"));

    }

    }

     

     

    Predicates:

    Map<String, Girl> map = new HashMap<String, Girl>() {
    {
    put("love the age", new Girl(18, "not so nice"));
    put("love the face", new Girl(16, "so nice"));
    }
    };
    Function<String, Girl> function = Functions.forMap(map);
    Predicate<Girl> predicate = new Predicate<Girl>() {
    @Override
    public boolean apply(Girl input) {
    return input.getAge() >= 18;
    }
    };
    Predicate<String> result = Predicates.compose(predicate, function);
    return result;

  • 相关阅读:
    .NET 压缩解压库发布,支持进度查看
    WPF 蒙罩层 LoadingPage
    WPF如何用TreeView制作好友列表、播放列表
    WPF多线程UI更新——两种方法
    .NET责任链模式(混合单例模式,模板方法模式)-----制作与扩展能力验证
    .NET单例模式-------各种写法&&验证
    迭代器模式和组合模式混用
    正确理解DTO、值对象和POCO
    理解POCO
    VM
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/6252737.html
Copyright © 2011-2022 走看看