如何删除groovy代码中的负索引错误?

时间:2017-12-29 12:03:40

标签: groovy apache-nifi

我在nifi处理器(executeScript处理器)中有代码逻辑,这将减少日志文件(在这种情况下,在我的日志文件中我有相同的文本,所以我想删除重复项,我尝试按名称和文件大小选择它们),但我有时(并不总是)得到负面索引错误,我应该在代码中更改什么才能使其正常工作?

import org.apache.nifi.processor.FlowFileFilter;
import groovy.json.JsonSlurper
import groovy.json.JsonBuilder
import java.nio.charset.StandardCharsets
import org.apache.commons.io.IOUtils

def flowFile = session.get();
def  n=0;
if(!flowFile)return
def size = flowFile.getAttribute('Size');
int value = size as Integer;
if((value/338)>=1){
def ffList = session.get(new FlowFileFilter(){
    public FlowFileFilterResult filter(FlowFile ff) {

        if( size == ff.getAttribute('Size') ){ n++; return FlowFileFilterResult.ACCEPT_AND_CONTINUE;}
       else{ return FlowFileFilterResult.REJECT_AND_CONTINUE; }
    }

});

session.transfer(ffList[n-1],REL_SUCCESS);
session.remove( ffList[0..-2] )
session.remove(flowFile);
}
else{
session.transfer(flowFile,REL_SUCCESS);
}

1 个答案:

答案 0 :(得分:0)

我认为你应该在访问元素之前检查列表的大小。

def ffSize = ffList.size()
if (n <= ffSize && ffSize >= 2) {
    session.transfer(ffList[n - 1], REL_SUCCESS)
    session.remove(ffList[0..-2])
    session.remove(flowFile)
}