以线程安全的方式迭代集合时收集列表中的元素

时间:2017-12-25 06:21:09

标签: salesforce mule java.util.concurrent

我设置Salesforce fetchSize = 100,但它不会为我的查询获取100个元素的元素。因此,我希望能够将ConsumerIterator中的单个结果收集到一个列表中,以100个为一组交付给批处理。下面是代码。这是一个正确的方法吗?我将不胜感激如何正确地做到这一点。我想分批处理所有ConsumerIterator元素。如果批次小于50,我想处理该批次。我的尝试低于

  ConsumerIterator<HashMap<String,Object>> iter=
                    (ConsumerIterator<HashMap<String,Object>>)obj;
  List<HashMap<String,Object>> l=new CopyOnWriteArrayList<>();
  while(iter.hasNext()){
   Object payload=iter.next();
  if(l.size()<50){
        l.add((HashMap<String,Object>)payload);
  }else{
    write(l);
  } 

  public int [] write(List<HashMap<String,Object> list)
  {
    synchronized(list)
    {
      ArrayList newList=copy(list);
      save(newList);
    } 

+

2 个答案:

答案 0 :(得分:0)

在Salesforce查询中,您可以追加“限制100”;在查询结束时,只能获取列表中的100个元素。

答案 1 :(得分:0)

我通过使用100的获取大小解决了这个问题,然后使用生成的ConsumerIterator来聚合元素。