Java 将ArrayList中出现的所有字段与另一ArrayList中的相同字段进行匹配(循环搜索并匹配)
我喜欢将通过Java 将ArrayList中出现的所有字段与另一ArrayList中的相同字段进行匹配(循环搜索并匹配),java,arraylist,Java,Arraylist,我喜欢将通过ArrayList A中包含的cweids的所有事件与ArrayList B中包含的cweids进行匹配,以便处理cweids的每个事件。由于每次出现都必须进行记录和处理,因此我无法使用集合,两个ArrayList实际上都是从数据库中查询的。请参阅下面我所做工作的代码片段。循环只经过ArrayList B一次,如何完成迭代 public static void vulnerabilityCorrelator(String imageName, String microserviceN
ArrayList A
中包含的cweids
的所有事件与ArrayList B
中包含的cweids
进行匹配,以便处理cweids
的每个事件。由于每次出现都必须进行记录和处理,因此我无法使用集合
,两个ArrayList实际上都是从数据库中查询的。请参阅下面我所做工作的代码片段。循环只经过ArrayList B一次,如何完成迭代
public static void vulnerabilityCorrelator(String imageName, String microserviceName) {
ScannerDAO.em.getTransaction().begin();
List<Anchore> imageVulns = new ArrayList<Anchore>();
Map<String, String> correlatedVulns = new HashMap<String, String>();
Query appQ = ScannerDAO.em
.createQuery("SELECT a FROM Alert a WHERE a.microserviceName='" + microserviceName + "'");
Query imageQ = ScannerDAO.em.createQuery("SELECT i FROM Anchore i WHERE i.imageName='" + imageName + "'");
int count = 0;
imageVulns = imageQ.getResultList();
List<Alert> appVulns = appQ.getResultList();
System.out.println("appVulns.size() " + appVulns.size());
for (int i = 0; i < appVulns.size(); i++) {
Alert alert = appVulns.get(i);
System.out.println(alert);
String appCweId = alert.getCweid();
for (Anchore imageV : imageVulns) {
List<Vulnerability> vulnList = imageV.getVulnerabilities();
for (Vulnerability vulnerability : vulnList) {
String imageCweId = vulnerability.getCweid();
System.out.println(imageCweId);
String imageCweIdR = null;
if (imageCweId == null || imageCweId.equals("None")) {
System.out.println(vulnerability.getVuln() + " does not have a CWE ID ");
} else {
String splitimageCweId[] = vulnerability.getCweid().split("-");
imageCweIdR = splitimageCweId[1];
}
if (appCweId.equalsIgnoreCase(imageCweIdR) || appCweId == imageCweIdR) {
System.out.println("correlated appCweId : " + appCweId + " imageCweId : " + imageCweIdR);
count++;
System.out.println("counting " + count);
correlatedVulns.put(vulnerability.getVuln(), vulnerability.getCweid());
System.out.println(vulnerability.getVuln() + " : " + vulnerability.getCvssScore());
} else {
System.out.println("not correlated appCweId : " + appCweId + " imageCweId : " + imageCweIdR);
}
}
}
System.out.println(" correlated count : " + count);
System.out.println(alert.getAlert());
}
}
publicstaticvoid漏洞关联器(stringimagename,stringmicroservicename){
ScannerDAO.em.getTransaction().begin();
List imageVulns=new ArrayList();
Map correlatedVulns=新HashMap();
查询appQ=ScannerDAO.em
.createQuery(“从警报a中选择一个,其中a.microserviceName=”“+microserviceName+””);
Query imageQ=ScannerDAO.em.createQuery(“从锚地i中选择i,其中i.imageName='“+imageName+””);
整数计数=0;
imageVulns=imageQ.getResultList();
List appVulns=appQ.getResultList();
System.out.println(“appVulns.size()”+appVulns.size());
对于(int i=0;i
以下代码修复了该问题:
public static Map<String, String> vulnerabilityCorrelator(String imageName, String microserviceName) {
ScannerDAO.em.getTransaction().begin();
List<Anchore> imageVulns = new ArrayList<Anchore>();
List<Alert> appVulns = new ArrayList<>();
Map<String, String> correlatedVulns = new HashMap<String, String>();
Map<String, String> correlatedAppInfo = new HashMap<String, String>();
Query appQ = ScannerDAO.em
.createQuery("SELECT a FROM Alert a WHERE a.microserviceName='" + microserviceName + "'");
Query imageQ = ScannerDAO.em.createQuery("SELECT i FROM Anchore i WHERE i.imageName='" + imageName + "'");
int count = 0;
int noncorrelatedcount = 0;
int loopingcounts = 0;
imageVulns = imageQ.getResultList();
appVulns = appQ.getResultList();
List<Vulnerability> vulnList = new ArrayList();
for (Anchore imageV : imageVulns) {
vulnList = imageV.getVulnerabilities();
}
int loop = 0;
for (Alert al : appVulns) {
Alert alert = appVulns.get(loop);
for (int j = 0; j < vulnList.size(); j++) {
Vulnerability vulner = vulnList.get(j);
String appCweId = alert.getCweid();
String imageCweId = vulner.getCweid();
String imageCweIdR = null;
if (imageCweId == null || imageCweId.equals("None")) {
System.out.println(vulner.getVuln() + " does not have a CWE ID ");
} else {
String splitimageCweId[] = imageCweId.split("-");
imageCweIdR = splitimageCweId[1];
}
if (appCweId.equalsIgnoreCase(imageCweIdR) || appCweId == imageCweIdR) {
System.out.println("correlated appCweId : " + appCweId + " imageCweId : " + imageCweIdR);
count++;
System.out.println("counting " + count);
correlatedVulns.put(vulner.getVuln(), vulner.getPackage());
correlatedAppInfo.put(alert.getAlert(), alert.getCweid());
System.out.println(vulner.getVuln() + " : " + vulner.getCvssScore());
} else {
System.out.println("not correlated appCweId : " + appCweId + " imageCweId : " + imageCweIdR);
noncorrelatedcount++;
}
}
loop++;
}
for (int k = 0; k < correlatedVulns.size(); k++) {
System.out.println("correlatedVulns " + k + " : " + correlatedVulns);
}
for (int l = 0; l < correlatedAppInfo.size(); l++) {
System.out.println("correlatedAppInfo " + l + " : " + correlatedAppInfo);
}
return correlatedVulns;
}
公共静态映射漏洞关联器(字符串imageName、字符串microserviceName){
ScannerDAO.em.getTransaction().begin();
List imageVulns=new ArrayList();
List appVulns=new ArrayList();
Map correlatedVulns=新HashMap();
Map correlatedAppInfo=新HashMap();
查询appQ=ScannerDAO.em
.createQuery(“从警报a中选择一个,其中a.microserviceName=”“+microserviceName+””);
Query imageQ=ScannerDAO.em.createQuery(“从锚地i中选择i,其中i.imageName='“+imageName+””);
整数计数=0;
int非相关计数=0;
整数循环计数=0;
imageVulns=imageQ.getResultList();
appVulns=appQ.getResultList();
List vulnList=new ArrayList();
用于(锚地图像V:imageVulns){
vulnList=imageV.getVulnerabilities();
}
int循环=0;
用于(警报al:appVulns){
Alert-Alert=appVulns.get(循环);
对于(int j=0;j
我想投票否决一个没有评论的问题不是最好的方法,问题的问题是什么?你能给出一个输入和输出的例子吗?@user3170251输入将是mysql查询的结果,由相应的POJO
反序列化,因此可能是json。