guava 学习一 函数,集合操作

pom

test

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </dependency>
View Code

guava

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>27.0.1-jre</version>
        </dependency>

一、FluentIterable

初始化数据

// 这里初始化一些测试数据
    @Before
    public void setUp() {
        Girl girl1 = new Girl(17, "nice");
        Girl girl2 = new Girl(18, "not so nice");
        Girl girl3 = new Girl(19, "nice");
        Girl girl4 = new Girl(20, "not so nice");
        // 这里使用Lists.newArrayList添加对象,避免多次调用list.add方法,下篇会有说明
        girls = Lists.newArrayList(girl1, girl2, girl3, girl4);
    }

    // 测试用Girl对象
    static class Girl {
        int age;
        String face;

过滤 from filter

/**
         * from方法:用于包装Iterable接口,返回FluentIterable实例
         * filter方法:用于过滤集合中元素,返回过滤后的集合
         */
        FluentIterable<Girl> iterable = FluentIterable.from(girls).filter(new Predicate<Girl>(){

            @Override
            public boolean apply(@Nullable Girl input) {
                // 过滤相貌nice的Girl对象
                return "nice".equals(input.getFace());
            }
            
        });
        
        for (Girl girl : iterable) {
            System.out.println(girl.toString());
            // 输出
            //Girl [age=17, face=nice]
            //Girl [age=19, face=nice]
        }
        
        

转换transfrom  + 拼接

/**
         * transform方法:用于根据指定Function转换集合元素,返回转换后的集合
         */
        Iterable<String> fluentIterable = FluentIterable.from(girls).transform(new Function<Girl, String>() {
            @Override
            public String apply(Girl input) {
                //Joiner类对相应的元素内容进行拼接处理
                return Joiner.on(",").join(input.getAge(), input.getFace());
            }
        });
        for (String girl : fluentIterable) {
            /** 打印结果:
             17,nice
             18,not so nice
             19,nice
             20,not so nice
             */
            System.out.println(girl);
        }

二、List

创建新的List

LIst转换处理

        ArrayList<String> newArrayList = Lists.newArrayList();
        
        List<String> keys = Lists.newArrayList("a", "b", "c", "a");
        
        
        
        /**
         * transform:根据传进来的function对fromList进行相应的处理 并将处理得到的结果存入到新的list对象中返回
         */
        List<String> newList = Lists.transform(keys, new Function<String, String>() {
            @Override
            public String apply(String input) {
                // 这里简单的对集合中的元素转换为大写
                return input.toUpperCase();
            }
        });
        System.out.println(newList);// [I LOVE U, I LIKE U, I HATE U]
        
        
        String str = "i love u";// 测试用
        String[] strs = { "i like u", "i miss u" };// 测试用

/**
* asList:返回一个不可变的List 其中包含指定的第一个元素和附加的元素数组组成 修改这个数组将反映到返回的List上
*/
List<String> list = Lists.asList(str, strs);

分割、反转
reverse

三、Map

创建、

将set转成Map

HashMap<Object, Object> mapa = Maps.newHashMap();
        
        /**
         * asMap:返回一个活动的map
         * 键值为给定的set中的值
         * value为通过给定Function计算后的值。
         */
        Set<String> set = Sets.newHashSet("a", "b", "c");
        //Function:简单的对元素做大写转换,下面示例多次使用
        Function<String, String> function = new Function<String, String>() {
            @Override
            public String apply(String input) {
                return input.toUpperCase();
            }
        };
        //输出:{b=B, c=C, a=A}
        System.out.println(Maps.asMap(set, function));

参考:https://my.oschina.net/realfighter?tab=newest&catalogId=576615

原文地址:https://www.cnblogs.com/lyon91/p/10270607.html