Guava之FluentIterable使用示例

Posted winner-0715

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Guava之FluentIterable使用示例相关的知识,希望对你有一定的参考价值。

FluentIterable 是guava集合类中常用的一个类,主要用于过滤、转换集合中的数据;FluentIterable 是一个抽象类,实现了Iterable接口,大多数方法都返回FluentIterable对象,这也是guava的思想之一。

下面主要针对filter 和transform方法进行演示。

filter方法要接收Predicate接口,transform接收Function接口,一般在方法中采用new接口实现回调方法apply的方式。

首先构造集合中的元素类型

public class User {
    private int age;
    private String name;

    public User() {
    }

    public User(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name=‘" + name + ‘\‘‘ +
                ‘}‘;
    }
}

1.过滤出年龄是20岁的用户

public class Test {
    public static void main(String[] args) {
        List<User> userList = Lists.newArrayList();
        userList.add(new User(18, "zhangsan"));
        userList.add(new User(20, "lisi"));
        userList.add(new User(22, "wangwu"));
        FluentIterable<User> filter = FluentIterable.from(userList).filter(new Predicate<User>() {
            @Override
            public boolean apply( User user) {
                return user.getAge() == 20;
            }
        });
        for (User user : filter) {
            System.out.println(user);
        }
    }

}

打印效果:

User{age=20, name=‘lisi‘}

这里有一个潜在的坑,在高版本(21.0++)的guava中Predicate接口继承了java 8中的java.util.function.Predicate

@FunctionalInterface
@GwtCompatible
public interface Predicate<T> extends java.util.function.Predicate<T>

我使用的jdk版本是1.7,所以只能使用20.0以下的guava版本。因为没有java.util.function.Predicate这个接口~

2.转换集合类型   ,把list中的user对象转换为String

public class Test {
    public static void main(String[] args) {
        List<User> userList = Lists.newArrayList();
        userList.add(new User(18, "zhangsan"));
        userList.add(new User(20, "lisi"));
        userList.add(new User(22, "wangwu"));
        FluentIterable<String> transform  = FluentIterable.from(userList).transform(new Function<User, String>() {
            @Override
            public String apply(User user) {
                return Joiner.on(",").join(user.getName(), user.getAge());
            }
        });
        for (String user : transform) {
            System.out.println(user);
        }
    }

}

打印效果

zhangsan,18
lisi,20
wangwu,22

Function接口的定义

public interface Function<F, T>

From-->To

3.拿到所有用户的年龄

public class Test {
    public static void main(String[] args) {
        List<User> userList = Lists.newArrayList();
        userList.add(new User(18, "zhangsan"));
        userList.add(new User(20, "lisi"));
        userList.add(new User(22, "wangwu"));
        List<Integer> ages = FluentIterable.from(userList).transform(new Function<User, Integer>() {
            @Override
            public Integer apply(User input) {
                return input.getAge();
            }
        }).toList();
        System.out.println(ages);
    }
}

打印结果

[18, 20, 22]

参考:

集合中的FluentIterable类

以上是关于Guava之FluentIterable使用示例的主要内容,如果未能解决你的问题,请参考以下文章

Guava之Iterables使用示例

Google Guava之常见Object方法

Google Guava之常见Object方法

Guava RateLimiter限流器使用示例

Guava文档翻译之 Guava简介

java基础--extension package guava