Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排列/列出问题_Java_Arrays_List - Fatal编程技术网

Java 排列/列出问题

Java 排列/列出问题,java,arrays,list,Java,Arrays,List,我有一个方法,它返回由所有这些属性组成的文档列表: private String activitySource, activitySystemStatus, regionCode, channel, creatorUserId, displayOnAccessIndicator, documentLocationCode, extraDetails, keywordList, lastUserId, summaryText,

我有一个方法,它返回由所有这些属性组成的文档列表:

private String activitySource, activitySystemStatus, regionCode, channel,
               creatorUserId, displayOnAccessIndicator, documentLocationCode,
               extraDetails, keywordList, lastUserId, summaryText,
               textTypeIndicator;
方法如下:

public DocumentSummary[] getDocumentList(String crn, String dateFormat) {
    log.debug("Entering getDocuments() method");
    //
    RetrieveDocumentListRequestDTO requestDto =
            new RetrieveDocumentListRequestDTO();
    RetrieveDocumentListResultDTO resultDto =
            odrUtils.retrieveDocumentList(crn, requestDto);
    Document[] dtoDocuments = resultDto.getDocumentArray();
    //
    DocumentSummary[] domainDocuments =
            new DocumentSummary[dtoDocuments.length];
    //
    for (int count = 0; count < domainDocuments.length; count++) {
        domainDocuments[count] =
                new DocumentSummary(dtoDocuments[count], dateFormat);
    }
    return domainDocuments;
}
public DocumentSummary[]getDocumentList(字符串crn,字符串dateFormat){
调试(“输入getDocuments()方法”);
//
RetrieveDocumentListRequestDTO requestDto=
新的RetrieveDocumentListRequestDTO();
RetrieveDocumentListResultTo ResultTo=
odrUtils.检索文档列表(crn,请求的DTO);
文档[]dtoDocuments=resultDto.getDocumentArray();
//
DocumentSummary[]域文档=
新文档摘要[dtoDocuments.length];
//
对于(int count=0;count
我如何不返回整个列表,而只返回设置了displayOnAccessIndicator的列表?

任何建议或示例代码都将不胜感激。

我假设displayonacessindicator属性属于文档类。您可以尝试类似的方法,可能存在一些语法错误,请忽略这些错误

List domainDocuments = new ArrayList();
for (int count = 0; count < dtoDocuments.length; count++) {
     if (dtoDocuments[count].isDisplayOnAccessIndicator()) {
          domainDocuments.add(new DocumentSummary(dtoDocuments[count], dateFormat));
     }
}

return domainDocuments.toArray(new DocumentSummary[0])
List domainDocuments=new ArrayList();
对于(int count=0;count
我将交换所有这些代码:

    Document[] dtoDocuments = resultDto.getDocumentArray();

    DocumentSummary[] domainDocuments = new DocumentSummary[dtoDocuments.length];

    for (int count = 0; count < domainDocuments.length; count++) {
            domainDocuments[count] = new DocumentSummary(dtoDocuments[count], dateFormat);
    }
Document[]dtoDocuments=resultDto.getDocumentArray();
DocumentSummary[]domainDocuments=新文档摘要[dtoDocuments.length];
对于(int count=0;count
为此(有些是个人品味):

List arr=new ArrayList();
对于(文档文档文档:resultDto.getDocumentArray())
if(文档显示AccessIndicator)
arr.add(doc);

视情况而定。如果您的意思是从上面的函数中,只需替换:

domainDocuments[count] = new DocumentSummary(dtoDocuments[count], dateFormat);
与:


首先,如果可能的话,您应该真正使用通用列表而不是数组。如果您不能更改方法签名,我仍然会使用泛型列表来构建列表的内容,然后使用Collections.toArray()将泛型列表转换为数组。

如果我没有弄错,您只希望将那些元素添加到结果数组中,这些元素具有
document.displayonacessindicator==true
。由于这可以在for循环中轻松检查,我认为您的问题在于处理结果数组

我强烈建议使用java集合接口(例如
java.util.List
)。在本例中,我假设至少是Java版本5

Document[] dtoDocuments = resultDto.getDocumentArray();
List<DocumentSummary> domainDocuments = new ArrayList<DocumentSummary>();

for (Document doc : dtoDocuments) {
    if (doc.isDisplayOnAccessIndicator()) { // or doc.getDisplayOnAccessIndicator()
        domainDocuments.add(new DocumentSummary(dtoDocuments[count], dateFormat));
    }
}

// change return type accordingly
// or use return domainDocuments.toArray(new DocumentSummary[domainDocuments.size()]);
return domainDocuments;
Document[]dtoDocuments=resultDto.getDocumentArray();
List domainDocuments=new ArrayList();
用于(文档文档:DTO文档){
if(doc.isdisplayanccessindicator()){//或doc.getDisplayOnAccessIndicator()
添加(新文档摘要(dtoDocuments[count],dateFormat));
}
}
//相应更改退货类型
//或者使用return domainDocuments.toArray(新文档摘要[domainDocuments.size()]);
归还域名文件;

如果您想使用列表,请参阅我上面的一条建议(我个人最喜欢奥利的建议)。使用ArrayList构造函数可以提高性能,如下所示:

... = new ArrayList<DocumentSummary>(
            dtoDocuments.length * DISPLAY_ON_ACCESS_PREDICTION);
…=新阵列列表(
dtoDocuments.length*在访问预测时显示);
其中,在访问预测中显示:

  • 1(int),如果您的结果集不是很大,并且您不在乎占用一点额外的内存
  • 一个常数,基于您对系统的了解
  • 如果性能真的很重要-一个基于历史(平均值、移动平均值等)或预测(如果您可以提前做出预测)的变量
此外,如果模型非常大,并且希望节省内存,则可以使用ArrayList.trimToSize()

如果您想继续使用阵列,这里有两条建议:
建议1,假设获得询问指标状态为“缓慢”(耗时/资源消耗):

/。。。
DocumentSummary[]domainDocuments=新文档摘要[dtoDocuments.length];
int=0;
for(int count=0;count
建议2,假设获得询问指标状态为“快”(时间/资源不足):

int-actualCount=0;
for(int count=0;count
我不使用数组,而是使用ArrayList(或更一般的集合),然后根据谓词进行筛选。请参见

改用通用列表,您可以通过向toArray(新文档摘要[domainDocuments.size()])传递一个长度正确的数组来进行优化。这里有一个小的更正:for循环需要运行到
dtoDocuments.length
。Vivia La将结果数组用于循环。Arne大小未知
Document[] dtoDocuments = resultDto.getDocumentArray();
List<DocumentSummary> domainDocuments = new ArrayList<DocumentSummary>();

for (Document doc : dtoDocuments) {
    if (doc.isDisplayOnAccessIndicator()) { // or doc.getDisplayOnAccessIndicator()
        domainDocuments.add(new DocumentSummary(dtoDocuments[count], dateFormat));
    }
}

// change return type accordingly
// or use return domainDocuments.toArray(new DocumentSummary[domainDocuments.size()]);
return domainDocuments;
... = new ArrayList<DocumentSummary>(
            dtoDocuments.length * DISPLAY_ON_ACCESS_PREDICTION);
//...
DocumentSummary[] domainDocuments = new DocumentSummary[dtoDocuments.length];
int skipped = 0;
for (int count = 0; count < domainDocuments.length; ++count) {
    if (doc.isDisplayOnAccessIndicator()) {
        DocumentSummary summary = new DocumentSummary(dtoDocuments[count], dateFormat);
        domainDocuments[count - skipped] = summary;
    } else {
        ++skipped;
    }
}
//trim the array
DocumentSummary[] result = new DocumentSummary[count - skipped];
System.arrayCopy(domainDocuments, 0, result, 0, count - skipped);
return result;
int actualCount = 0;
for (int count = 0; count < domainDocuments.length; ++count) {
    if (doc.isDisplayOnAccessIndicator()) {
        ++actualCount;
    } else {
        ++skipped;
    }
}
DocumentSummary[] domainDocuments = new DocumentSummary[actualCount];
int skipped = 0;
for (int count = 0; count < domainDocuments.length; ++count) {
    if (doc.isDisplayOnAccessIndicator()) {
        DocumentSummary summary = new DocumentSummary(dtoDocuments[count], dateFormat);
        domainDocuments[count - skipped] = summary;
    } else {
        ++skipped;
    }
}
return domainDocuments;