码迷,mamicode.com
首页 > 其他好文 > 详细

Guava之FluentIterable使用示例

时间:2018-02-04 12:40:40      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:用户   fun   war   ica   nal   ring   public   arraylist   zhang   

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使用示例

标签:用户   fun   war   ica   nal   ring   public   arraylist   zhang   

原文地址:https://www.cnblogs.com/winner-0715/p/8412655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!