guava-集合使用

Posted 佛系程序媛

tags:

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

之前给上游提供批量插入的接口时,遇到一个问题,需要将dto批量转换成data。
用apache、spring提供的单例转换需要循环,见http://www.cnblogs.com/kivi170806/p/8007057.html。这时guava就排上用场啦。
源码如下

public static <F, T> List<T> transform(List<F> fromList, Function<? super F, ? extends T> function) {
        return (List)(fromList instanceof RandomAccess?new Lists.TransformingRandomAccessList(fromList, function):new Lists.TransformingSequentialList(fromList, function));
    }

demo如下

List<Entity> entities = Lists.transform(dtos, new Function<DTO, Entity>() {
            @Override
            public Entity apply(DTO dto) {
                Entity entity = new Entity();
                BeanCopier beanCopier = BeanCopier.create(DTO.class, Entity.class, false);
                beanCopier.copy(dto, entity, null);
                return entity;
            }
        });

解决完这个问题之后,需要将转换后的进行过滤。这里遇到了java.util.ConcurrentModificationException的问题。这里可以用guava的filter。

           //filter这段逻辑是将过滤掉md5相同的entity.
        if (CollectionUtils.isNotEmpty(falledPromoEntities)) {
            promoEntities = newArrayList(filter(promoEntities, new Predicate<Entity>() {
                @Override
                public boolean apply(@Nullable Entity entity) {
                    for (Entity promoEntity : falledPromoEntities) {
                        if (entity.getMD5().equals(promoEntity.getMD5())) {
                            return false;
                        }
                    }
                    return true;
                }
            }));
        }

以上是关于guava-集合使用的主要内容,如果未能解决你的问题,请参考以下文章

java代码之美---guava之Immutable(不可变)集合

有没有一种优雅的方法可以在使用 Guava 转换集合时删除空值?

guava中eventbus注解使用

Guava 3: 集合Collections

Java技术专题「Guava技术系列」Guava-Collections实战使用相关Guava不一般的集合框架

Guava集合--集合扩展工具类