Java 只要存在键匹配,就减去两个贴图的值?
我将解释逻辑:我正在读取一个包含许多soap格式的请求和响应的XML文件,然后将请求和响应存储在两个哈希映射中。在第一个散列映射中,我将事务Id(unique)存储为键,将值存储为请求时间,til name。在第二个哈希映射中,我将事务Id(unique)存储为键,将值存储为响应时间。在这两个哈希映射中,键是相同的,但值是不同的,通过使用for循环迭代两个循环,我需要得到响应时间和请求时间之间的时间差 例如:请求时间:2020-01-30T11:07:08.351Z,响应时间:2020-01-30T11:07:10.152ZJava 只要存在键匹配,就减去两个贴图的值?,java,web-services,soap,data-structures,hashmap,Java,Web Services,Soap,Data Structures,Hashmap,我将解释逻辑:我正在读取一个包含许多soap格式的请求和响应的XML文件,然后将请求和响应存储在两个哈希映射中。在第一个散列映射中,我将事务Id(unique)存储为键,将值存储为请求时间,til name。在第二个哈希映射中,我将事务Id(unique)存储为键,将值存储为响应时间。在这两个哈希映射中,键是相同的,但值是不同的,通过使用for循环迭代两个循环,我需要得到响应时间和请求时间之间的时间差 例如:请求时间:2020-01-30T11:07:08.351Z,响应时间:2020-01-3
public class MapTimeDiff {
public static void main(String[] args) throws ParseException {
File file =new File("C:\\Users\\gsanaulla\\Documents\\My Received Files\\ecarewsframework.xml");
Scanner in = null;
String tilname = null;
String transactionId = null;
String requesttime = null;
String responsetime = null;
Date dateOne = null;
Date dateTwo = null;
double timeDiff;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Map<String,ArrayList<String>> request=new HashMap<String,ArrayList<String>>();
ArrayList<String> req=new ArrayList<String>();
Map<String,ArrayList<String>> response=new HashMap<String,ArrayList<String>>();
ArrayList<String> res=new ArrayList<String>();
try {
in = new Scanner(file);
while(in.hasNext())
{
String line=in.nextLine();
if(line.contains("</S:Envelope>")) {
System.out.println(line);
tilname=line.split("StartRecord><")[1].split("><")[0].split(":")[1];
System.out.println("tilname :: "+tilname);
transactionId = line.split("transactionId>")[1].split("<")[0];
System.out.println("transactio id :: "+transactionId);
requesttime=line.split("sourceTimestamp>")[1].split("<")[0];
System.out.println("request time is :: "+requesttime);
dateOne = df.parse(requesttime);
}
req.add(tilname);
req.add(dateOne.toString());
System.out.println("req is==== " +req);
request.put(transactionId,req);
System.out.println("request is==== " +request.get(transactionId));
if(line.contains("</SOAP-ENV:Envelope>")) {
//System.out.println(line);
if(line.contains("transactionId"))
{
responsetime=line.split("sourceTimestamp>")[1].split("<")[0];
transactionId = line.split("transactionId>")[1].split("<")[0];
System.out.println("responsetime :: "+responsetime);
System.out.println("transaction id "+transactionId);
dateTwo = df.parse(responsetime);
}
res.add(dateTwo.toString());
System.out.println("res is===== "+res);
response.put(transactionId,res);
System.out.println("response is===== "+response.get(transactionId));
for (Entry<String, ArrayList<String>> entry : request.entrySet()) {
for (Entry<String, ArrayList<String>> entry1 : response.entrySet()) {
System.out.println("Key = " + entry.getKey() +
", Value = " + entry.getValue());
System.out.println("Key = " + entry1.getKey() +
", Value = " + entry1.getValue());
if(request.keySet().equals(response.keySet())) {
timeDiff = (dateTwo.getTime() - dateOne.getTime());
}
}
}
}
}
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
公共类MapTimeDiff{
公共静态void main(字符串[]args)引发异常{
File File=new File(“C:\\Users\\gsanaulla\\Documents\\My Received Files\\ecarewsframew.xml”);
扫描仪输入=空;
字符串名称=null;
字符串transactionId=null;
字符串requesttime=null;
字符串响应时间=null;
Date dateOne=null;
Date-dateTwo=null;
双时差;
DateFormat df=新的简化格式(“yyyy-MM-dd'T'HH:MM:ss.SSS”);
Map request=newhashmap();
ArrayList req=新的ArrayList();
Map response=newhashmap();
ArrayList res=新的ArrayList();
试一试{
in=新扫描仪(文件);
while(在.hasNext()中)
{
String line=in.nextLine();
如果(第行包含(“”)){
系统输出打印项次(行);
tilname=line.split(“StartRecord>”[1]。split(“”[1]。split(“”[1]。split(“”[1]。split(“我不确定我是否正确理解了您的问题,但也许您可以做类似的事情,例如:
Map<String, List<String>> requests = Map.of("1", List.of("10,13,12"), "2", List.of("8,7,9"), "3", List.of("11"));
Map<String, List<String>> responses = Map.of("1", List.of("9,10,14"), "2", List.of("8,9,6,12"));
for(Map.Entry<String, List<String>> requestEntry : requests.entrySet()) {
String transactionId = requestEntry.getKey();
if(responses.containsKey(transactionId)) {
System.out.println("Transaction Id: " + transactionId);
for(int i = 0; i < min(requestEntry.getValue().size(), responses.get(transactionId).size()); i++) {
List<String> requestTimes = asList(requestEntry.getValue().get(i).split(","));
List<String> responseTimes = asList(responses.get(transactionId).get(i).split(","));
for(int j = 0; j < min(requestTimes.size(), responseTimes.size()); j++) {
int requestTime = parseInt(requestTimes.get(j));
int responseTime = parseInt(responseTimes.get(j));
System.out.println("Difference: " + abs(requestTime - responseTime));
}
}
}
}
我没有粘贴完整的代码,但我会解释逻辑我没有粘贴完整的代码,但我会解释逻辑:我正在读取一个包含许多请求和响应的XML文件,然后我将请求和响应存储在两个哈希映射中。在第一个哈希映射中,我存储事务Id(唯一)作为键,值作为请求时间,til名称。在第二个哈希映射中,我存储事务Id(唯一)作为键和值作为响应时间。在两个哈希映射中,键是相同的,但值是不同的,通过使用for循环迭代两个循环,我需要获得响应时间和请求时间之间的时间差。你的问题是什么?你应该在问题中添加解释,而不是作为注释,以便更具可读性!@Stefan:我需要找到di响应时间和请求时间不同,但是requesttime是hashmap中的一个值,响应时间是其他hashmapasList()和parseInt()中的一个值,我的代码中没有这个方法。我已经粘贴了整个代码,请检查itUseArrays.asList()
和Integer.parseInt()
Transaction Id: 1
Difference: 1
Difference: 3
Difference: 2
Transaction Id: 2
Difference: 0
Difference: 2
Difference: 3