[英]Populating complex Map and accessing its values
问题1:我想将以下“类狗”的“特定”排序值添加到“ Ser”类中使用的“映射”中。 但我不知道如何实现这一目标,
问题2:如果成功填充地图,如何访问地图的填充值
以下是我的绝望尝试。
class Dog implements Comparator<Dog>, Comparable<Dog>{
private double Price;
private String Operator;
Dog(){
}
Dog( double p, String o){
Price= p;
Operator=o;
}
public double getPrice(){
return Price;
}
public String getOperator(){
return Operator;
}
// Overriding the compareTo method
public int compareTo(Dog d){
double data= Price - d.Price;
if ( data > 0.00001)return 1;
if (data < 0.00001) return -1;
return 0;
}
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1){
double data= d.Price - d1.Price;
if ( data > 0.00001)return 1;
if (data < 0.00001) return -1;
return 0;
}
}
public class Ser {
/**
* @param args
*/
public static void main(String[] args) {
// Takes a list o Dog objects
ArrayList <Dog> list1 = new ArrayList<Dog>();
Map <Integer, ArrayList<Dog> > map= new HashMap <Integer, ArrayList<Dog> > ();
list1.add(new Dog(0.99 , "A"));
list1.add(new Dog(0.91 , "C"));
list1.add(new Dog(0.92 , "A"));
list1.add(new Dog(0.97 , "B"));
list1.add(new Dog( 0.93 , "C"));
list1.add(new Dog(0.97 , "B"));
list1.add(new Dog(0.92, "A"));
list1.add(new Dog(0.97, "C"));
list1.add(new Dog(0.92, "A"));
// Sorts the array list using comparator
Collections.sort(list1, new Dog());
for(Dog a: list1)//printing the sorted list of ages
System.out.println( a.getOperator()+" : "+ a.getPrice());
map.put(92, list1);
map.put(445, list1);
map.put(966, list1);
// Collections.sort(list1, new Dog());
for (ArrayList<Dog> key: map.values() )
System.out.println(key);
}
}
输出:C:0.91,A:0.92,A:0.92,A:0.92,C:0.93,C:0.97,B:0.97,B:0.97,A:0.99
映射值的输出:[Dog @ a981ca,Dog @ 8814e9,Dog @ 1503a3,Dog @ 1a1c887,Dog @ 743399,Dog @ e7b241,Dog @ 167d940,Dog @ e83912,Dog @ 1fae3c6] [Dog @ a981ca,Dog @ 8814e9 ,Dog @ 1503a3,Dog @ 1a1c887,Dog @ 743399,Dog @ e7b241,Dog @ 167d940,Dog @ e83912,Dog @ 1fae3c6] [Dog @ a981ca,Dog @ 8814e9,Dog @ 1503a3,Dog @ 1a1c887,Dog @ 743399,狗@ e7b241,狗@ 167d940,狗@ e83912,狗@ 1fae3c6]
您正在看到Dog
的Object.toString
表示形式,您需要重写该方法:
@Override
public String toString() {
return "Dog [Price=" + Price + ", Operator=" + Operator + "]";
}
问题一:
您已经创建了一个Map
对象,该对象创建一个Integer Key并将其映射到Dogs 列表 。 如果您希望将Integers映射到Dogs,则需要从以下开始:
Map <Integer, Dog> map= new HashMap <Integer, Dog> ();
现在,假设你的排序是工作(我还没有看进去,我就让你调试证明,如果它是与否),你需要使用.get(int)
的方法List
收集来从狗您要放入地图中的列表。
您现在正在做的是将不同的整数映射到同一列表3次。
map.put(92, list1.get(0));
0表示list1
列表中的第一个Dog对象,请选择所需的内容代替0。
现在,对于需要打印它们的问题2 ,您将必须像Reimeus所说的那样滚动toString()
函数或手动执行。
for (Dog d : map.values()) {
System.out.println("Dog " + d.getPrice() + " " + d.getOperator());
}
同样,您之前所做的是获取已映射到映射中整数的List
对象。 如果要保留该格式,则必须遍历List中的每个值:
for (List<Dog> ld : map.values()) {
for (Dog d : ld) {
System.out.println(...);
}
}
希望这对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.