guava-集合使用
阿新 • • 發佈:2017-12-26
pre and spring sts fall ssl lis seq min
之前給上遊提供批量插入的接口時,遇到一個問題,需要將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-集合使用