java - 如何将 ArrayList 转换为 Array
问题描述
我无法将整个数组列表传递给我的 java 程序中的方法。
我在论坛中搜索并尝试了一些其他程序员能够解决的解决方案,但在我的程序中我无法实现相同的解决方案。
我已在此处附上代码,并突出显示了我面临问题的那一行。
import java.io.File;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.axiom.om.OMElement;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
import com.mercury.itg.ws.dm.client.AddRequestNotesDocument;
import com.mercury.itg.ws.dm.client.AddRequestNotesResponseDocument;
import com.mercury.itg.ws.dm.client.Column;
import com.mercury.itg.ws.dm.client.CreateRequestDocument;
import com.mercury.itg.ws.dm.client.CreateRequestResponseDocument;
import com.mercury.itg.ws.dm.client.DeleteRequestsDocument;
import com.mercury.itg.ws.dm.client.DeleteRequestsResponseDocument;
import com.mercury.itg.ws.dm.client.DemandServiceStub;
import com.mercury.itg.ws.dm.client.ExecuteWFTransitionsDocument;
import com.mercury.itg.ws.dm.client.ExecuteWFTransitionsResponseDocument;
import com.mercury.itg.ws.dm.client.GetRequestsDocument;
import com.mercury.itg.ws.dm.client.GetRequestsResponseDocument;
import com.mercury.itg.ws.dm.client.Identifier;
import com.mercury.itg.ws.dm.client.Note;
import com.mercury.itg.ws.dm.client.RemoteReference;
import com.mercury.itg.ws.dm.client.Request;
import com.mercury.itg.ws.dm.client.SetRequestFieldsDocument;
import com.mercury.itg.ws.dm.client.SetRequestFieldsResponseDocument;
import com.mercury.itg.ws.dm.client.SetRequestRemoteReferenceStatusDocument;
import com.mercury.itg.ws.dm.client.SetRequestRemoteReferenceStatusResponseDocument;
import com.mercury.itg.ws.dm.client.SimpleField;
import com.mercury.itg.ws.dm.client.Table;
import com.mercury.itg.ws.dm.client.URLReference;
import oracle.jdbc.OracleTypes;
import oracle.jdbc.OracleDriver;
public class PMCDeleteRequest {
protected ConfigurationContext ctx = null;
public PMCDeleteRequest() {
final String repositoryPath = System.getProperty("client.repository.dir");
final String axis2 = repositoryPath + "/conf/client-axis2.xml";
final File file = new File(axis2);
if (file.exists()) {
try {
this.ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repositoryPath, axis2);
} catch (final Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
String name;
public void setName(String name) {
this.name = name;
}
/**
* The main program Parameter: args[0] - service URL. e.g.
* http://server:port/itg/ppmservices/DemandService
*/
public static void main(final String[] args) throws Exception {
String URL = args[0];
String username = args[1];
String password = args[2];
String requestids = args[3];
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(URL, username, password);
String request_ids = requestids;
String commaSeparateRequestIds = request_ids.replaceAll("#@#", ",");
String request_delete_sql = "SELECT REQUEST_ID FROM (SELECT KFMP.REQUEST_ID FROM KCRT_FG_MASTER_PROJ_REF KFMP, PM_PROJECTS PP WHERE KFMP.REF_MASTER_PROJECT_ID = PP.PROJECT_ID AND PP.PROJECT_ID IN ("
+ commaSeparateRequestIds + "))";
PreparedStatement sgStmt = con.prepareStatement(request_delete_sql);
ResultSet rs = sgStmt.executeQuery();
List<String> delete = new ArrayList<String>();
try {
while (rs.next()) {
final String serviceURL = "https://.../DemandService";
String requestId = Integer.toString(rs.getInt(1));
delete.add(requestId);
}
System.out.println("arraylist: "+delete);
pmc.deleteRequests(serviceURL,delete); // Here i am unable to pass the entire arraylist
}
catch (final Exception e) {
if (e instanceof org.apache.axis2.AxisFault) {
final org.apache.axis2.AxisFault xe = (org.apache.axis2.AxisFault) e;
System.out.println(xe.getMessage());
System.out.println("---detail---");
final Iterator iter = xe.getDetail().getChildElements();
while (iter.hasNext()) {
final OMElement item = (OMElement) iter.next();
System.out.println(item.getText());
}
System.out.println("------------");
} else {
throw e;
}
System.exit(1);
}
rs.close();
con.close();
}
private void deleteRequests(final String serviceURL, final String[] requestIds) throws Exception {
// construct the Identifier array
final Identifier[] ids = new Identifier[requestIds.length];
for (int i = 0; i < requestIds.length; i++) {
ids[i] = Identifier.Factory.newInstance();
ids[i].setId(requestIds[i]);
}
// get Webservice handle
final DemandServiceStub stub = new DemandServiceStub(this.ctx, serviceURL);
// Construct message to send
final DeleteRequestsDocument inDoc = DeleteRequestsDocument.Factory.newInstance();
final DeleteRequestsDocument.DeleteRequests deletes = inDoc.addNewDeleteRequests();
deletes.setRequestIdsArray(ids);
//Set the path for cacerts for searching certificate before invoking web service
System.setProperty("javax.net.ssl.trustStore","C:\\Java\\jdk1.7.0_80\\jre\\lib\\security\\cacerts");
// Invoke web service
final DeleteRequestsResponseDocument outDoc = stub.deleteRequests(inDoc);
// Process the return request
final int returnCode = outDoc.getDeleteRequestsResponse().getReturn();
System.out.println("Delete Requests Succeeded. Return Code: " + returnCode);
}
}
我在将整个数组列表传递给方法时遇到问题的那一行:
pmc.deleteRequests(serviceURL,delete);
这里的 deleteRequests 参数可以有(String,String[])
任何指导/建议都会非常有帮助。
谢谢和问候, 萨米特
解决方案
使用toArray(T[] a)
方法将 a 转换List
为数组。
String[] deleteArray = delete.toArray(new String[delete.size()]);
pmc.deleteRequests(serviceURL, deleteArray);
推荐阅读
- node.js - 超级账本结构通道创建节点 SDK - 错误
- mongodb - 有什么方法可以在 mongoDB 中使用 $exists 和 $expr 吗?
- android - 如何在 Android Studio 中自动生成飞镖函数的标头注释?
- python - 修改同一类的另一个实例时实例变量更改值,Python-Tkinter
- sql - ORACLE SQL - 将两个查询和一个值相加
- javascript - 使用 d3js 污染图表
- android - Flutter - 无法更新或删除应用内购买的托管产品?
- css - 为 prod 样式构建 angular 8 应用程序后为空
- python - 按属性(点)与括号访问熊猫列值时出现奇怪的错误
- tensorflow - 尝试导入 tensorflow 时,我得到了“超出顶级包的导入”