我有一个从数据库中检索多个值的对象列表,如下所示:
List<Object> listRequest = daoManager.getLaptopsForRequest(BigInteger.valueOf(itemTransItem.getAssetType().getId()), BigInteger.valueOf(approverId));
结果如下所示(在控制台上打印出来,每个都是通过):
{asset_type_id=1, inventory_id=1, from_dt=2015-09-18 18:04:55.77, id=1, asset_id=1, status=1, thru_dt=null}
{asset_type_id=1, inventory_id=1, from_dt=2015-09-18 18:04:55.77, id=2, asset_id=2, status=1, thru_dt=null}
{asset_type_id=1, inventory_id=1, from_dt=2015-09-18 18:04:55.77, id=3, asset_id=3, status=1, thru_dt=null}
获得asset_id = 2的对象或asset_id(1和2)数组并将结果放入另一个数组的最快和/或最有效的方法是什么?
我打算将每个对象转换为字符串,然后将每个字符串转换为数组(用逗号分隔),然后将数组的每个项目转换为另一个数组(或者一个hashmap) )使用=
,但这似乎是一种长而复杂的嵌套for循环方式,可能会失败(请参阅比较资产数组)。
也许还有另一种更快/更简单的方法来做到这一点,我错过了?有什么建议?感谢。
编辑:作为参考,这是getLaptopsForRequest
函数:
public List getLaptopsForRequest(BigInteger asset_type_id, BigInteger party_id){
SQLQuery query = sessionFactory.getCurrentSession().createSQLQuery(laptopsForRequestSql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List forRequest = query.setBigInteger(0, asset_type_id).setBigInteger(1, party_id).list();
return forRequest;
}
它返回查询结果的列表。由于此代码已经到位,我不允许编辑它。
答案 0 :(得分:1)
您要做的主要是过滤对象列表。您可以实现为列表编写自己的迭代器的过滤器模式。
只需扩展此类即可实现您自己的过滤器。
public abstract class Filter<T> {
public abstract boolean passes(T object);
public Iterator<T> filter(Iterator<T> iterator) {
return new FilterIterator(iterator);
}
public Iterable<T> filter(Iterable<T> iterable) {
return new Iterable<T>() {
public Iterator<T> iterator() {
return filter(iterable.iterator());
}
};
}
private class FilterIterator implements Iterator<T> {
private Iterator<T> iterator;
private T next;
private FilterIterator(Iterator<T> iterator) {
this.iterator = iterator;
toNext();
}
public boolean hasNext() {
return next != null;
}
public T next() {
if (next == null)
throw new NoSuchElementException();
T returnValue = next;
toNext();
return returnValue;
}
public void remove() {
throw new UnsupportedOperationException();
}
private void toNext() {
next = null;
while (iterator.hasNext()) {
T item = iterator.next();
if (item != null && passes(item)) {
next = item;
break;
}
}
}
}
}
然后以这种方式使用它:
List<MyObject> newList = new ArrayList<MyObject>();
for(MyObject obj : filter.filter(listObjs) ){
newList.add(obj);
}
答案 1 :(得分:1)
假设你的对象有getter和setter方法。
只有asset_id =&#34; 2&#34;,asset_id这里是字符串的对象
listRequest.stream().filter(e -> e.getAssetId() == "2" ).toArray();
答案 2 :(得分:1)