将对象存储到 HashMap 中
Storing objects into a HashMap
我有一个 XML,我正在按以下方式使用 JAXB 将其转换为 java 对象:
package IRCurves;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class XmlToObject {
public static void main(String[] args) {
try {
File file = new File("InterestRates_JPY_20160426.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(InterestRateCurve.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
InterestRateCurve ir= (InterestRateCurve) jaxbUnmarshaller.unmarshal(file);
System.out.println(ir.getEffectiveasof()+" "+ir.getCurrency()+" "+ir.getBaddayconvention());
System.out.println("Deposits:");
List<Deposits> list=ir.getDeposits();
for(Deposits ans:list) {
System.out.println(ans.getDaycountconvention()+" "+ans.getSnaptime()+" "+ans.getSpotdate());
System.out.println("Calenders:");
List<Calenders> list1=ans.getCalenders();
for(Calenders c:list1)
System.out.println(c.getCalender());
System.out.println("Curvepoint:");
List<Curvepoint> list2=ans.getCurvepoint();
for(Curvepoint curve:list2)
System.out.println(curve.getTenor()+" "+curve.getMaturitydate()+" "+curve.getParrate());
}
System.out.println("Swaps:");
List<Swaps> list3=ir.getSwaps();
for(Swaps swap:list3) {
System.out.println(swap.getFixeddaycountconvention()+" "+swap.getFloatingdaycountconvention()+" "+swap.getFixedpaymentfrequency()+" "+swap.getFloatingpaymentfrequency()+" "+swap.getSnaptime()+" "+swap.getSpotdate());
/*System.out.println("Calenders:");
List<Calenders> list1=swap.getCalenders();
for(Calenders c:list1)
System.out.println(c.getCalender());*/
System.out.println("Curvepoint:");
List<Curvepoint> list2=swap.getCurvepoint();
for(Curvepoint curve:list2)
System.out.println(curve.getTenor()+" "+curve.getMaturitydate()+" "+curve.getParrate());
}
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
我想将其存储到 HashMap<"Deposits_1M", 2016-06-29 -0.00029)
形式的哈希映射中,其中 1M
是我们通过 curve.getTenor()
获得的值,2016-06-29
是其中之一我们通过 curve.getMaturitydate()
和 -.00029
获得的价值我们通过 curve.getParrate()
获得。所以,基本上我希望我们从 for(Curvepoint curve:list2)
和 getTenor()
的每次迭代中获得的值与字符串 "Deposits"
以及我们从 curve.getMaturitydate(
获得的值一起作为键)和 curve.getParrate()
作为一个哈希映射条目的值。
我该怎么做?
Java集合Map(包括HashMap)是参数化的,所以需要在声明中包含键值类型:
Map<String,String> resultsMap = new HashMap<>();
然后要创建一个条目,您可以使用 Map.put,所以在您的情况下我认为这将是:
resultsMap.put(curve.getTenor(), curve.getMaturitydate()+" "+curve.getParrate())
正在寻找将 1 个键映射到多个值的结构?
HashMap<String,List<Integer> results = new HashMap<String,List<Integer>();
// Does Key already exist?
List<Integer> temp = results.get(curve.getTenor());
if(temp != null){
//if it does add to object
temp.add(curve.getMaturitydate());
temp.add(curve.getParrate());
}else{
// if not make object and put in has map
List<Integer> nn = new ArrayList<Integer>();
nn.add(curve.getMaturitydate());
nn.add(curve.getParrate());
userList.put(curve.getTenor(), nn);
}
然后在您的结构中,所有值都将存储在 ArrayList 位置 0-1 中。
如果您不想拆分字符串或将它们存储为 concat。现在,如果值发生变化并存储多个答案。每2个数组索引是一对值。
我有一个 XML,我正在按以下方式使用 JAXB 将其转换为 java 对象:
package IRCurves;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class XmlToObject {
public static void main(String[] args) {
try {
File file = new File("InterestRates_JPY_20160426.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(InterestRateCurve.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
InterestRateCurve ir= (InterestRateCurve) jaxbUnmarshaller.unmarshal(file);
System.out.println(ir.getEffectiveasof()+" "+ir.getCurrency()+" "+ir.getBaddayconvention());
System.out.println("Deposits:");
List<Deposits> list=ir.getDeposits();
for(Deposits ans:list) {
System.out.println(ans.getDaycountconvention()+" "+ans.getSnaptime()+" "+ans.getSpotdate());
System.out.println("Calenders:");
List<Calenders> list1=ans.getCalenders();
for(Calenders c:list1)
System.out.println(c.getCalender());
System.out.println("Curvepoint:");
List<Curvepoint> list2=ans.getCurvepoint();
for(Curvepoint curve:list2)
System.out.println(curve.getTenor()+" "+curve.getMaturitydate()+" "+curve.getParrate());
}
System.out.println("Swaps:");
List<Swaps> list3=ir.getSwaps();
for(Swaps swap:list3) {
System.out.println(swap.getFixeddaycountconvention()+" "+swap.getFloatingdaycountconvention()+" "+swap.getFixedpaymentfrequency()+" "+swap.getFloatingpaymentfrequency()+" "+swap.getSnaptime()+" "+swap.getSpotdate());
/*System.out.println("Calenders:");
List<Calenders> list1=swap.getCalenders();
for(Calenders c:list1)
System.out.println(c.getCalender());*/
System.out.println("Curvepoint:");
List<Curvepoint> list2=swap.getCurvepoint();
for(Curvepoint curve:list2)
System.out.println(curve.getTenor()+" "+curve.getMaturitydate()+" "+curve.getParrate());
}
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
我想将其存储到 HashMap<"Deposits_1M", 2016-06-29 -0.00029)
形式的哈希映射中,其中 1M
是我们通过 curve.getTenor()
获得的值,2016-06-29
是其中之一我们通过 curve.getMaturitydate()
和 -.00029
获得的价值我们通过 curve.getParrate()
获得。所以,基本上我希望我们从 for(Curvepoint curve:list2)
和 getTenor()
的每次迭代中获得的值与字符串 "Deposits"
以及我们从 curve.getMaturitydate(
获得的值一起作为键)和 curve.getParrate()
作为一个哈希映射条目的值。
我该怎么做?
Java集合Map(包括HashMap)是参数化的,所以需要在声明中包含键值类型:
Map<String,String> resultsMap = new HashMap<>();
然后要创建一个条目,您可以使用 Map.put,所以在您的情况下我认为这将是:
resultsMap.put(curve.getTenor(), curve.getMaturitydate()+" "+curve.getParrate())
正在寻找将 1 个键映射到多个值的结构?
HashMap<String,List<Integer> results = new HashMap<String,List<Integer>();
// Does Key already exist?
List<Integer> temp = results.get(curve.getTenor());
if(temp != null){
//if it does add to object
temp.add(curve.getMaturitydate());
temp.add(curve.getParrate());
}else{
// if not make object and put in has map
List<Integer> nn = new ArrayList<Integer>();
nn.add(curve.getMaturitydate());
nn.add(curve.getParrate());
userList.put(curve.getTenor(), nn);
}
然后在您的结构中,所有值都将存储在 ArrayList 位置 0-1 中。 如果您不想拆分字符串或将它们存储为 concat。现在,如果值发生变化并存储多个答案。每2个数组索引是一对值。