【发布时间】:2018-03-26 08:34:10
【问题描述】:
我目前正在修改一个高级项目,但我仍然是 JAVA 的新手。我试图搜索有关泛型方法和应用的大量信息,但它们似乎不正确。请帮助我,看看并纠正我哪里错了。谢谢你。 =)
下面是我尝试用于合并 for 循环的通用方法的代码。
public String[] name = {
"SDLManPower sdlManPower",
"SDLScopeOfWork sdlSOW",
"SDLMaterial sdlMat",
"SDLUtility sdlUtil",
"SDLTMEquip sdlTMEquip"
};
public String[] sname = {
"sdlManPower",
"sdlSOW",
"sdlMat",
"sdlUtil",
"sdlTMEquip"
};
public String[] list = {
"getAttendanceList()",
"getSowList()",
"SDLMaterial sdlMat",
"getUtilityList()",
"getEquipmentList()"
};
public String[] forlp = {
"(SDLManPower manPower : sdlManPowerList",
"SDLScopeOfWork sow : sdlSOWList",
"SDLMaterial projectMat : sdlMaterialList",
"SDLUtility utility : sdlUtilityList",
"SDLTMEquip sdlEquipment : sdlEquipmentList"
};
public String[] id = {
"getUserUID()",
"getSubTreatmentID()",
"getPurposeID()",
"getUtilityID()",
"getSubEquipmentID()"
};
public String[] fname = {
"manPower",
"sow",
"projectMat",
"utility",
"sdlEquipment"
};
public static < T > void AllList(T[] name, T[] sname, T[] list, T[] forlp, T[] id, T[] fname) {
for (T x: name) {
for (name[x]: sdlReportObj.list[x]) {
Boolean alreadyExist = true;
for (forlp[x]) {
if (sname[x].id[x] == fname[x].id[x] && sname[x].getProjectTeamUID().equals(fname[x].getProjectTeamUID())) {
alreadyExist = true;
break;
} else {
alreadyExist = false;
}
}
if (!alreadyExist) {
UserGroup user = null;
Vendor v = null;
ProjectArrangement[] arrangementList = projectInfo.getProjPlan().getArrangementList();
for (ProjectArrangement projArrangement: arrangementList) {
if (projArrangement.getuID().equals(sname[x].getProjectTeamUID())) {
if (projArrangement.getUserGroupUID() != null) {
user = userList.getUserGroupCollection().findUserGroup(projArrangement.getUserGroupUID());
} else {
v = (Vendor) maintData.getVendorCollection().findItem(projArrangement.getVendorID());
}
}
}
sname[x].setTeamName(user != null ? user.getRoleFullName() : v.getName());
sname[x].setUserGroupID(user != null ? user.getRoleUID() : v.getId() + "");
sname[x].setDeletable(true);
sname[x].setValue(0.00);
sname[x].setPreLoad(false);
sdlEquipmentList.add(sdlTMEquip);
}
}
} //for name
}
下面的代码是资深的工作。他使用了许多 for 循环来执行类似的操作。 因此,我想使用一种通用方法,通过将所有 for 循环合并为一个来减少系统加载时间。但我失败了。 =(
if (sdlReportObj != null && sdlReportObj.getProjectUID().equals(projectInfo.getProjectUID())) {
for (SDLExpenses sdlExpenses: sdlReportObj.getExpensesList()) {
Boolean alreadyExist = true;
for (ProjectExpenses projExpenses: projectInfo.getProjPlan().getExpensesList()) {
if (projExpenses.getExpensesItemID() == sdlExpenses.getSubExpensesItemID()) {
alreadyExist = true;
break;
} else {
alreadyExist = false;
}
}
if (!alreadyExist || projectInfo.getProjPlan().getExpensesList().length == 0) {
sdlExpenses.setDeletable(true);
sdlExpenses.setValue(0.00);
sdlExpenses.setPreLoad(false);
sdlExpensesList.add(sdlExpenses);
}
}
for (SDLManPower sdlManPower: sdlReportObj.getAttendanceList()) {
Boolean alreadyExist = true;
for (SDLManPower manPower: sdlManPowerList) {
if (manPower.getUserUID().equals(sdlManPower.getUserUID()) && sdlManPower.getProjectTeamUID().equals(manPower.getProjectTeamUID())) {
alreadyExist = true;
break;
} else {
alreadyExist = false;
}
}
if (!alreadyExist) {
// tempManPower.setDeletable(false);
UserGroup user = null;
Vendor v = null;
ProjectArrangement[] arrangementList = projectInfo.getProjPlan().getArrangementList();
for (ProjectArrangement projArrangement: arrangementList) {
if (projArrangement.getuID().equals(sdlManPower.getProjectTeamUID())) {
if (projArrangement.getUserGroupUID() != null) {
user = userList.getUserGroupCollection().findUserGroup(projArrangement.getUserGroupUID());
} else {
v = (Vendor) maintData.getVendorCollection().findItem(projArrangement.getVendorID());
}
}
}
sdlManPower.setTeamName(user != null ? user.getRoleFullName() : v.getName());
sdlManPower.setUserGroupID(user != null ? user.getRoleUID() : v.getId() + "");
sdlManPower.setStartTime(null);
sdlManPower.setEndTime(null);
sdlManPower.setPreLoad(false);
sdlManPowerList.add(sdlManPower);
}
}
ArrayList < SDLScopeOfWork > tempSOWList = new ArrayList < SDLScopeOfWork > ();
for (SDLScopeOfWork sdlSOW: sdlReportObj.getSowList()) { //foreach sow in sdl
Boolean alreadyExist = true;
for (SDLScopeOfWork sow: sdlSOWList) {
if (sdlSOW.getSubTreatmentID() == sow.getSubTreatmentID() && sdlSOW.getProjectTeamUID().equals(sow.getProjectTeamUID())) { //
alreadyExist = true;
break;
} else {
alreadyExist = false;
tempSOWList.add(sow);
}
}
if (!alreadyExist) {
UserGroup user = null;
Vendor v = null;
ProjectArrangement[] arrangementList = projectInfo.getProjPlan().getArrangementList();
for (ProjectArrangement projArrangement: arrangementList) {
if (projArrangement.getuID().equals(sdlSOW.getProjectTeamUID())) {
if (projArrangement.getUserGroupUID() != null) {
user = userList.getUserGroupCollection().findUserGroup(projArrangement.getUserGroupUID());
} else {
v = (Vendor) maintData.getVendorCollection().findItem(projArrangement.getVendorID());
}
}
}
sdlSOW.setTeamName(user != null ? user.getRoleFullName() : v.getName());
sdlSOW.setUserGroupID(user != null ? user.getRoleUID() : v.getId() + "");
sdlSOW.setDeletable(true);
sdlSOW.setFrom(0.00);
sdlSOW.setTo(0.00);
sdlSOW.setValue(0.00);
sdlSOW.setPreLoad(false);
sdlSOWList.add(sdlSOW);
}
}
//sdlSOWList.addAll(tempSOWList);
for (SDLMaterial sdlMat: sdlReportObj.SDLMaterial sdlMat) {
Boolean alreadyExist = true;
for (SDLMaterial projectMat: sdlMaterialList) {
if (sdlMat.getPurposeID() == projectMat.getPurposeID() && sdlMat.getProjectTeamUID().equals(projectMat.getProjectTeamUID())) {
alreadyExist = true;
break;
} else {
alreadyExist = false;
}
}
if (!alreadyExist) {
UserGroup user = null;
Vendor v = null;
ProjectArrangement[] arrangementList = projectInfo.getProjPlan().getArrangementList();
for (ProjectArrangement projArrangement: arrangementList) {
if (projArrangement.getuID().equals(sdlMat.getProjectTeamUID())) {
if (projArrangement.getUserGroupUID() != null) {
user = userList.getUserGroupCollection().findUserGroup(projArrangement.getUserGroupUID());
} else {
v = (Vendor) maintData.getVendorCollection().findItem(projArrangement.getVendorID());
}
}
}
sdlMat.setTeamName(user != null ? user.getRoleFullName() : v.getName());
sdlMat.setUserGroupID(user != null ? user.getRoleUID() : v.getId() + "");
sdlMat.setDeletable(true);
sdlMat.setValue(0.00);
sdlMat.setPreLoad(false);
sdlMaterialList.add(sdlMat);
}
}
for (SDLUtility sdlUtil: sdlReportObj.getUtilityList()) { // a,b,d,c
Boolean alreadyExist = true;
for (SDLUtility utility: sdlUtilityList) { // a,b,c
if (sdlUtil.getUtilityID() == utility.getUtilityID() && sdlUtil.getProjectTeamUID().equals(utility.getProjectTeamUID())) {
alreadyExist = true;
break;
} else {
alreadyExist = false;
}
}
if (!alreadyExist) {
UserGroup user = null;
Vendor v = null;
ProjectArrangement[] arrangementList = projectInfo.getProjPlan().getArrangementList();
for (ProjectArrangement projArrangement: arrangementList) {
if (projArrangement.getuID().equals(sdlUtil.getProjectTeamUID())) {
if (projArrangement.getUserGroupUID() != null) {
user = userList.getUserGroupCollection().findUserGroup(projArrangement.getUserGroupUID());
} else {
v = (Vendor) maintData.getVendorCollection().findItem(projArrangement.getVendorID());
}
}
}
sdlUtil.setTeamName(user != null ? user.getRoleFullName() : v.getName());
sdlUtil.setUserGroupID(user != null ? user.getRoleUID() : v.getId() + "");
sdlUtil.setDeletable(true);
sdlUtil.setRegistrationNo(null);
sdlUtil.setValue(0.00);
sdlUtil.setPreLoad(false);
sdlUtilityList.add(sdlUtil);
}
}
// tm equip
for (SDLTMEquip sdlTMEquip: sdlReportObj.getEquipmentList()) {
Boolean alreadyExist = true;
for (SDLTMEquip sdlEquipment: sdlEquipmentList) {
if (sdlTMEquip.getSubEquipmentID() == sdlEquipment.getSubEquipmentID() && sdlTMEquip.getProjectTeamUID().equals(sdlEquipment.getProjectTeamUID())) {
alreadyExist = true;
break;
} else {
alreadyExist = false;
}
}
if (!alreadyExist) {
UserGroup user = null;
Vendor v = null;
ProjectArrangement[] arrangementList = projectInfo.getProjPlan().getArrangementList();
for (ProjectArrangement projArrangement: arrangementList) {
if (projArrangement.getuID().equals(sdlTMEquip.getProjectTeamUID())) {
if (projArrangement.getUserGroupUID() != null) {
user = userList.getUserGroupCollection().findUserGroup(projArrangement.getUserGroupUID());
} else {
v = (Vendor) maintData.getVendorCollection().findItem(projArrangement.getVendorID());
}
}
}
sdlTMEquip.setTeamName(user != null ? user.getRoleFullName() : v.getName());
sdlTMEquip.setUserGroupID(user != null ? user.getRoleUID() : v.getId() + "");
sdlTMEquip.setDeletable(true);
sdlTMEquip.setValue(0.00);
sdlTMEquip.setPreLoad(false);
sdlEquipmentList.add(sdlTMEquip);
}
}
是否可以使用通用方法来减少加载时间和循环次数? 还有其他方法可以解决吗?谢谢。
【问题讨论】:
标签: java generics generic-programming generic-list