我正在尝试将地图中的密钥提取到集合中。 键是具有2个原始参数的对象, 我怎么做它不重复设置我想要的参数? 下面的代码是方法,param是帐户。 我希望通过acc。
的余额使集合不重复public static Map<Account, MyLinkedList<Customer>> getAccounts() {
Map<Account, MyLinkedList<Customer>> AccMap = new TreeMap<>(new AccountComparator());
System.out.print("Please enter how many accounts: ");
int accNumber = in.nextInt();
System.out.println();
for(int i = 1; i <= accNumber; i++){
System.out.print("Account # " + i +". Number of customers: ");
int cusNumber = in.nextInt();
System.out.println("-----------------------------------------");
//Account acc = new Account(accountID++, (int)(Math.random()*200-100));
MyList<Customer> cusList = new MyLinkedList<>();
cusList = getCustomers(cusNumber);
AccMap.put(new Account(accountID++, (int)(Math.random()*200-100)), (MyLinkedList<Customer>) cusList);
}
System.out.println(AccMap.toString());
return AccMap;
}
答案 0 :(得分:0)
地图有一个名为keyset的方法,它将所有键作为一组返回到地图。由于映射的工作方式,它在键上已经是唯一的(在您的情况下是Account
对象)。但是,它使用帐户比较器和等于方法检查唯一性。
如果您的AccountComparator
课程仅比较accountID
,则应该提供您想要的内容。
如果您的比较器包含两个参数,那么您可能会遇到问题。
答案 1 :(得分:0)
为什么不迭代从地图上调用的keySet方法获得的集合,然后在迭代时删除重复项?或者你甚至可以迭代从entrySet方法获得的集合,并在迭代时过滤掉重复项,并将遗骸保存在另一个集合中。我认为没有更简单的方法:/