我正在开发一个使用JPA和以下代码的项目,我可以从DB中检索包含用户配置文件的对象列表。每个对象都是一个双字段对象(字,频率)
public class JpaUserprofilesDao implements UserProfilesDao {
@PersistenceUnit
private EntityManagerFactory emf;
EntityManager em;
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
@Transactional
@Override
public List<Object[]> getUserProfiles(Long userId){
em = getEntityManager();
try {
List<Object[]> up =em.createQuery("SELECT up.userprofilesPK.word, up.userprofilesPK.frequency from Userprofiles up WHERE up.userprofilesPK.userid= :userid").setParameter("userid", userId).getResultList();
return up;
} finally {
em.close();
}
}
}
在我的项目的另一个类中,我使用以下代码块,以便将上述信息放在Map中并能够操作它。
profileObject = peristanceservice.getUserProfiles(userId);
for(Object[] s: profileObject ){
if(!tempList.contains(s[0].toString())){
bag.put( (String) s[0].toString(), Integer.parseInt(s[1].toString()) );
tempList.add(s[0].toString());
}
}
即使我得到了结果,也需要花费很长时间来处理由persistance服务返回的对象列表并将它们放到Map中,这最终证明是无用的。 有没有办法直接从persistance服务获取Map?
提前谢谢。
答案 0 :(得分:0)
这不是你想要的,但你可以使用它。
您可以使用Guava将List
转换为Map
使用Maps.uniqueIndex
:
Returns an immutable map for which the Map.values() are the given elements in the given order, and each key is the product of invoking a supplied function on its corresponding value.
示例:
Map<String,String> mappedRoles = Maps.uniqueIndex(yourList, new Function<String,String>() {
public String apply(String from) {
// do stuff here
return result;
}});